我使用的沉浸式状态栏

解决方案

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. 滑动返回界面设置状态栏颜色:

    建议配合 bingoogolapple/BGASwipeBackLayout-Android: Android Activity 滑动返回 库一起使用。

    StatusBarUtil.setColorForSwipeBack(Activity activity, @ColorInt int color, int statusBarAlpha)
    
  5. 当你设置了 statusBarAlpha 值时,该值需要在 0 ~ 255 之间

  6. 在 Fragment 中的使用可以参照 UseInFragmentActivity.java 来实现


原文地址:

博客:    http://blog.csdn.net/xiaoqiang_0719/article/details/52290487

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



猜你喜欢

转载自blog.csdn.net/xiaoqiang_0719/article/details/78060772