一.概述
安卓自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));