很多情况下,例如华为手机和谷歌原生系统只有虚拟按键,这时候假如你们做了特殊处理我们可以将布局绘制到navigationBar里面。当然为了避免这种情况,我们应该讲所有的绘图到在navigationBar上面。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:clipToPadding">false</item>
<item name="android:windowTranslucentNavigation">false</item>//适配华为手机的虚拟按键
<item name="android:windowTranslucentStatus">true</item>
<item name="android:navigationBarColor">@color/white10</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/white10</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowBackground">@color/windowBackground</item>
<item name="android:textColorHighlight">@color/white</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="android:textColorSecondary">@color/white</item>
<item name="android:textColor">@color/white</item>
<item name="android:divider">@color/white</item>
<item name="android:textColorHint">@color/white</item>
<item name="colorControlNormal">@color/white</item>
<item name="colorControlActivated">@color/white</item>
<item name="colorControlHighlight">@color/white</item>
</style>
//适配华为手机的虚拟按键
<item name="android:windowTranslucentNavigation">false</item>
沉浸栏导航栏也不要了
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
这样我们就没有手动绘制得出每个navigationBar的高度。stackoverflow的至今没有一个完全的答案可以判断是否存在虚拟按键
private int getNavigationBarHeight() {
Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
return resources.getDimensionPixelSize(resourceId);
}
return 0;
}
加了一个margin但是在小米手机这种没有虚拟键的也同时预留了一段空白。