该工程演示了 Android 中正确处理绘制系统状态栏和系统导航栏区域的方式。
通过 View.setSystemUiVisibility()
设置状态栏、导航栏及布局相关状态,相关参数:
View.SYSTEM_UI_FLAG_FULLSCREEN
:隐藏状态栏View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
:隐藏导航栏View.SYSTEM_UI_FLAG_LAYOUT_STABLE
:当使用View.SYSTEM_UI_FLAG_FULLSCREEN
或View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
导致状态栏或导航栏显示状态发生变化时,不会触发布局刷新View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
:应用布局时使用状态栏区域View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
:应用布局时使用导航栏区域
设置控件是否处理 WindowInsets,当值为 true 时,控件默认通过增加 padding 值处理 WindowInsets。
AndroidSdk < 20 可以通过重写 View.fitSystemWindows(Rect)
自定义 WindowInsets 的处理方式,AndroidSdk >= 20 可以通过重写 View.onApplyWindowInsets(WindowInsets)
或设置 View.OnApplyWindowInsetsListener
达到同样的效果。
- v19:
<item name="android:windowTranslucentStatus">true</item>
:设置状态栏为半透明<item name="android:windowTranslucentNavigation">true</item>
:设置导航栏为半透明
- v21:
<item name="android:statusBarColor">@android:color/transparent</item>
:设置状态栏为透明<item name="android:navigationBarColor">@android:color/transparent</item>
:设置导航栏为透明
- v28:
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
:设置应用可以利用”刘海屏“的”刘海“区域