1. 程式人生 > >我使用的沉浸式狀態列

我使用的沉浸式狀態列

解決方案

1、給狀態列設定顏色

思路是:

  • 先設定狀態列透明屬性;

  • 給根佈局加上一個和狀態列一樣大小的矩形View(色塊),新增到頂上;

  • 然後設定根佈局的 FitsSystemWindows 屬性為 true,此時根佈局會延伸到狀態列,處在狀態列位置的就是之前新增的色塊,這樣就給狀態列設定上顏色了。

程式碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /** * 設定狀態列顏色 * * @param activity 需要設定的activity * @param color    狀態列顏色值
*/ public static void setColor(Activity activity, int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 設定狀態列透明 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 生成一個狀態列大小的矩形 View statusView = createStatusView(activity, color); // 新增 statusView 到佈局中
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); decorView.addView(statusView); // 設定根佈局的引數 ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0); rootView.setFitsSystemWindows(true); rootView.setClipToPadding(true); } }

其中生成狀態列一樣大小的矩形色塊的程式碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /** * 生成一個和狀態列大小相同的矩形條 * * @param activity 需要設定的activity * @param color    狀態列顏色值 * @return 狀態列矩形條 */ private static View createStatusView(Activity activity, int color) { // 獲得狀態列高度 int resourceId = activity.getResources().getIdentifier("status_bar_height""dimen""android"); int statusBarHeight = activity.getResources().getDimensionPixelSize(resourceId); // 繪製一個和狀態列一樣高的矩形 View statusView = new View(activity); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight); statusView.setLayoutParams(params); statusView.setBackgroundColor(color); return statusView; }

在 setContentView() 之後呼叫 setColor(Activity activity, int color) 方法即可。

2.使用整合到Jcenter的library

使用

  1. 在 build.gradle 檔案中新增依賴, StatusBarUtil 已經發布在 JCenter:

    compile 'com.jaeger.statusbarutil:library:1.4.0'
    
  2. 在 setContentView() 之後呼叫你需要的方法,例如:

    setContentView(R.layout.main_activity);
    ...
    StatusBarUtil.setColor(MainActivity.this, mColor);
    
  3. 如果你在一個包含 DrawerLayout 的介面中使用, 你需要在佈局檔案中為 DrawerLayout 新增 android:fitsSystemWindows="true" 屬性:

    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    
        ...
    
    </android.support.v4.widget.DrawerLayout>
    
  4. 滑動返回介面設定狀態列顏色:

    StatusBarUtil.setColorForSwipeBack(Activity activity, @ColorInt int color, int statusBarAlpha)
    
  5. 當你設定了 statusBarAlpha 值時,該值需要在 0 ~ 255 之間


原文地址:

部落格:    http://blog.csdn.net/xiaoqiang_0719/article/details/52290487

Jcenter:   https://jaeger.itscoder.com/android/2016/03/27/statusbar-util.html