我使用的沉浸式狀態列
阿新 • • 發佈:2019-01-24
解決方案
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
使用
-
在 build.gradle 檔案中新增依賴, StatusBarUtil 已經發布在 JCenter:
compile 'com.jaeger.statusbarutil:library:1.4.0'
-
在
setContentView()
之後呼叫你需要的方法,例如:setContentView(R.layout.main_activity); ... StatusBarUtil.setColor(MainActivity.this, mColor);
-
如果你在一個包含
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>
-
滑動返回介面設定狀態列顏色:
StatusBarUtil.setColorForSwipeBack(Activity activity, @ColorInt int color, int statusBarAlpha)
-
當你設定了
statusBarAlpha
值時,該值需要在 0 ~ 255 之間
原文地址:
部落格: http://blog.csdn.net/xiaoqiang_0719/article/details/52290487
Jcenter: https://jaeger.itscoder.com/android/2016/03/27/statusbar-util.html