爲了提高用戶的體驗效果,一般項目都要求了實現沉浸式狀態欄。現總結一些方法如下(主要是方便以後自己做項目使用,大牛可以忽略不看):
1.最簡單的就是導入第三方庫
添加依賴庫:
compile 'com.jaeger.statusbaruitl:library:1.0.0'
方法的使用也如下:
//設置顏色
StatusBarUtil.setColor(Activity1.this, Color.BLUE );
//設置透明度,0- 255
StatusBarUtil.setTranslucent( Activity2.this , 127 ) ;
//設置全屏
StatusBarUtil.setTransparent( Activity3.this ) ;
//側邊菜單
mDrawerLayout = (DrawerLayout) findViewById( R.id.drawer_layout );
mDrawerLayout.setDrawerShadow(R.mipmap.ic_launcher , GravityCompat.START);
StatusBarUtil.setColorForDrawerLayout( Activity4.this , mDrawerLayout , Color.BLUE) ;
2.使用如下方法:
1. 給狀態欄設置顏色
思路是:
- 先設置狀態欄透明屬性;
- 給根佈局加上一個和狀態欄一樣大小的矩形View(色塊),添加到頂上;
- 然後設置根佈局的
FitsSystemWindows
屬性爲true
,此時根佈局會延伸到狀態欄,處在狀態欄位置的就是之前添加的色塊,這樣就給狀態欄設置上顏色了。
代碼如下:
/** * 設置狀態欄顏色 * * @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);
}
}
其中生成狀態欄一樣大小的矩形色塊的代碼如下:
/** * 生成一個和狀態欄大小相同的矩形條 * * @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)
方法即可。