Android隱藏系統狀態欄(沉浸式狀態欄)和設置狀態欄顏色

Android 5.0(API 21)以後就能夠對系統狀態欄進行設置了,這裏我不是想深刻討論對系統狀態欄的一些高級設置,由於通常也用不到,我只想說最多見的兩種場景
  • 隱藏系統狀態欄,這就是感受很牛逼的沉浸式狀態欄
  • 狀態欄顏色變化後狀態欄顯示內容顏色隨之改變

1. 沉浸式狀態欄

這種最簡單,只須要拿到當前activity windowDecorView,而後設置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

上面代碼的做用就是狀態欄的高度沒有了,可是注意狀態欄的顯示仍是有的,就是這樣:

是否是很醜?這時候你的產品經理確定會不滿意,要你改,我猜他是否是想要這種效果:
面試

若是我猜對了,那麼就繼續看吧!學習

2. 從新設置你的TitleBar

這個解決方法更簡單,就是改變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

3. 設置狀態欄顯示字體內容顏

這種場景很常見,好比上面的圖,若是你的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

小結

學會以上三點,你基本能夠交差了,可是下面的這種場景你應該仍是要知道。視頻

4. 狀態欄着色

可能因爲某種特定緣由,你可能想給狀態欄設置另一種顏色,那麼這也很簡單:

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教學視頻,音視頻開發)

相關文章
相關標籤/搜索