開發者這里可以把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); //設置虛擬鍵的背景顏色
效果: