开发者这里可以把Android 9及更高版本上的的小白条理解为虚拟按钮,适配方法也一样,这里有四种适配方法,其中部分方法可能在API30中弃用了,请自行替换选择。
不适配,显示大黑边
不多解释
沉浸适配,显示透明黑边
代码:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
需要给适配的View添加属性android:fitsSystemWindows="true"
When this flag is enabled for a window, it automatically sets the system UI visibility flags View#SYSTEM_UI_FLAG_LAYOUT_STABLE and View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN.
效果显示:
沉浸适配,无黑边
代码
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().setNavigationBarColor(Color.TRANSPARENT);
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE|
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
);
需要给适配的View添加属性android:fitsSystemWindows="true"
效果:
给虚拟键设置颜色
代码:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setStatusBarColor(Color.BLUE); //设置状态栏的背景颜色
getWindow().setNavigationBarColor(Color.BLUE); //设置虚拟键的背景颜色
效果: