狀態列和導航欄的設定
阿新 • • 發佈:2018-11-28
其中有些值是要相互配合使用,單一使用沒有效果,需要的時候查詢文件,都有解釋, 或是多嘗試幾次,也就知道該用哪個了。
// 沉浸式狀態列
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//5.0以上使用原生方法
// window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
// | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
// );
// 當 setStatusBarColor 設定為 TRANSPARENT(透明)時,
// window.getDecorView().setSystemUiVisibility()
// 設定 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN (全屏)時,statusBar 會遮擋佈局
// 如果setStatusBarColor 設定為其他顏色時,設定全屏屬性時也不會遮擋佈局
// window.setStatusBarColor(Color.TRANSPARENT);
// window.setStatusBarColor(Color.GRAY);// 頂部狀態列的顏色
// window.setNavigationBarColor(Color.BLUE);
// window.setNavigationBarColor(Color.BLUE); // 底部狀態列的顏色,部分手機會有
window.addFlags(
// WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
// WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION // 底部導航欄透明,設定該屬性之後底部導航欄設定什麼顏色都不起做用
// WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS // 頂端狀態列透明,設定該屬性後,導航欄設定其他的顏色都不起作用
// WindowManager.LayoutParams.FLAG_FULLSCREEN // 全屏,不顯示頂部狀態列,顯示下面導航欄
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
);
window.getDecorView().setSystemUiVisibility(
// 導航欄上的圖示會變暗,有的不可見
// View.SYSTEM_UI_FLAG_LOW_PROFILE |
// 全屏 上面導航欄不顯示
// View.SYSTEM_UI_FLAG_FULLSCREEN
// 上面會遮擋,下面不遮擋
// View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// 與 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 一起使用,文件中說如果不設定該值,
// 系統使用其他值時會清除掉View.SYSTEM_UI_FLAG_HIDE_NAVIGATION這個值,但沒看到效果
// View.SYSTEM_UI_FLAG_IMMERSIVE
// 與 View.SYSTEM_UI_FLAG_FULLSCREEN 一起使用時,上面的狀態列不顯示,從螢幕頂部向下滑動時
// 狀態列會出現,一段時間後訊息
// 與 SYSTEM_UI_FLAG_HIDE_NAVIGATION 一起使用時類似
// 在真機上部分會出現狀態列白色的情況
// View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
// 佈局會擴充套件到全屏,上下導航欄會遮擋佈局
// View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
//自動隱藏下邊導航欄,手動調出時,不會遮擋布
// View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
// 不全屏,佈局在狀態列下面
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
// 狀態列文字顯示深色
// View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//4.4-5.0使用三方工具類,有些4.4的手機有問題,這裡為演示方便,不使用沉浸式
// getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// SystemBarTintManager tintManager = new SystemBarTintManager(this);
// tintManager.setStatusBarTintEnabled(true);
// tintManager.setStatusBarTintColor(Color.TRANSPARENT);
}