一.概述
安卓自4.4版本支持一種半透明狀態欄的效果,在國內更多稱之為沉浸式頂欄.
二.沉浸式狀態欄的實現
1.引入相關依賴
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:support-v4:22.2.1'
compile 'com.android.support:design:22.2.0'
2.定義資源文件
3.布局文件
一個LinearLayout作為內容區域,一個NavigationView作為菜單。
注意下Toolbar的高度應設置為wrap_content。
大體看完布局文件以后,有幾個點要特別注意:
ToolBar高度設置為wrap_content
ToolBar添加屬性android:fitsSystemWindows="true"
header_just_username.xml的跟布局RelativeLayout,添加屬性android:fitsSystemWindows="true"
android:fitsSystemWindows這個屬性,主要是通過調整當前設置這個屬性的view的padding去為我們的status_bar留下空間。
4. ? ?4.4 版本與5.0的統一
我們可以通過自己定義一個View去填充
package com.status.demo;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by zhy on 15/9/21.
*/
public class StatusBarCompat {
private static final int INVALID_VAL = -1;
private static final int COLOR_DEFAULT = Color.parseColor("#20000000");
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static void compat(Activity activity,intstatusColor){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
if(statusColor != INVALID_VAL){
activity.getWindow().setStatusBarColor(statusColor);
}
return;
}
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){
intcolor = COLOR_DEFAULT;
ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);if(statusColor != INVALID_VAL){
color = statusColor;
}
View statusBarView =newView(activity);
ViewGroup.LayoutParams lp =newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
statusBarView.setBackgroundColor(color);
contentView.addView(statusBarView, lp);
}
}
public static void compat(Activity activity){
compat(activity, INVALID_VAL);
}
public static int getStatusBarHeight(Context context){
intresult =0;
intresourceId = context.getResources().getIdentifier("status_bar_height","dimen","android");
if(resourceId >0){
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
}
只需要在Activity里面去寫上:
StatusBarCompat.compat(this);
或者你要自己定義顏色
StatusBarCompat.compat(this, getResources().getColor(R.color.status_bar_color));