Android 5.0(API 21)以後就能夠對系統狀態欄進行設置了,這裏我不是想深刻討論對系統狀態欄的一些高級設置,由於通常也用不到,我只想說最多見的兩種場景
這種最簡單,只須要拿到當前activity window
的DecorView
,而後設置setSystemUiVisibility()
便可。
示例:git
Window window = activity.getWindow(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); }
其實想要沉浸式狀態欄,只須要設置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
屬性足夠了,其餘的只是些通用作法。好比View.SYSTEM_UI_FLAG_LAYOUT_STABLE
是設置狀態欄字體顏色仍是跟隨系統。window.setStatusBarColor(Color.TRANSPARENT)
是設置狀態欄爲全透明github
上面代碼的做用就是狀態欄的高度沒有了,可是注意狀態欄的顯示仍是有的,就是這樣:
是否是很醜?這時候你的產品經理確定會不滿意,要你改,我猜他是否是想要這種效果:面試
若是我猜對了,那麼就繼續看吧!學習
這個解決方法更簡單,就是改變TitleBar的高度和paddingTop,看下面示例就會豁然開朗:字體
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { ViewGroup.LayoutParams params = view.getLayoutParams(); int topMargin = getStatusBarHeight(view.getContext()); params.height = params.height + topMargin; view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + topMargin, view.getPaddingRight(), view.getPaddingBottom()); view.setLayoutParams(params); }
這裏的view固然就是你的TitleBar,狀態欄的顏色是你的TitleBar的背景色。效果見上圖。getStatusBarHeight(context)
應該不用我說了,不會的話本身百度ui
這種場景很常見,好比上面的圖,若是你的TitleBar是白色或者淺色,那麼你狀態欄的顯示內容將會看不見,或者很醜。spa
這個時候你須要改變你狀態欄顯示內容的顏色,只有幾行代碼:.net
Window window = activity.getWindow(); if (ColorUtils.calculateLuminance(color) >= 0.5) { window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } else { window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE); }
color就是你設置的狀態欄顏色,或者說是TitleBar的背景色,但注意這是一個int值,不是resourceId。ColorUtils.calculateLuminance(color) >= 0.5
的做用只是肯定這個顏色是亮色仍是暗色。View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
是幫你把狀態欄顯示內容變成黑色,而View.SYSTEM_UI_FLAG_LAYOUT_STABLE
是跟隨系統。code
學會以上三點,你基本能夠交差了,可是下面的這種場景你應該仍是要知道。視頻
可能因爲某種特定緣由,你可能想給狀態欄設置另一種顏色,那麼這也很簡單:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = activity.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(getResources().getColor(R.color.your_color)); }
好比下圖我把狀態欄設置成黑
更多面試內容分析,分享,學習筆記整理,視頻整理
https://github.com/xiangjiana...
(點個star領取PDF面試大全,附送CSDN下載資源,flutter教學視頻,音視頻開發)