* 沉浸式状态栏
轮子: ImmersionBar
博客:android4.4以上沉浸式状态栏和导航栏实现以及Bar的其他管理
这个轮子呢,不仅处理好了状态栏以及可能会有的导航栏的颜色问题,还可以设置纯色和渐变色,并且在沉浸式会引起的键盘冲突也有很好的处理。关于具体的使用说明请查看git和博主博文,这里以我使用的为例做一个简单的举例。
我项目中通常遇到的情况就是:
1、Activity全屏:①全屏中只有图片或者内容距离状态栏比较大;②全屏但是在顶部也存在一些控件(这样就会导致控件被状态栏中的电池时间等信息给遮挡)
2、同一个Activity中Fragment的状态栏需要不同
3、涉及到渐变色和纯色的问题
这里面附带的问题就是沉浸式状态栏会带来的键盘冲突的问题。。
以下在Activity的基类中的setContentView方法之后设置的代码:
if(HEIGHT_IS_LIGHTBG_DARKFONT==status){//状态栏高度存在,背景浅色,状态栏字体需要深色状态栏改为黑色如果不支持加上透明状态栏保证状态栏字体可以看到(在不支持更改颜色的手机上将状态栏加上透明度0.2f)
ImmersionBar.with(this).statusBarColor(R.color.white).statusBarDarkFont(true,0.2f).fitsSystemWindows(true).init();
}else if(HEIGHT_IS_DARKBG_WHITEFONT==status){//状态栏高度存在,背景深色,字体默认浅色
ImmersionBar.with(this).statusBarColor(R.color.login_register).fitsSystemWindows(true).keyboardEnable(true).init();
}else if(HEIGHT_NONE_LIGHTBG_DARKFONT==status){//状态栏高度不存在,背景浅色,字体深色
ImmersionBar.with(this).statusBarDarkFont(true,0.2f).keyboardEnable(true).init();
}else if(HEIGHT_NONE_DARKBG_LIGHTFONT==status){//状态栏高度不存在,背景深色,字体浅色
ImmersionBar.with(this).keyboardEnable(true).init();
}else if(HEIGHT_VIEW_LIGHT==status){//状态栏和标题栏一样保持渐变色,这里用了view
statusView = easyFind(R.id.status_view);//在布局文件中需要添加一个view
StatusBarUtil.setStatusView(statusView,true);//将本机状态栏高度测量出来设置给上面的view
ImmersionBar.with(this).statusBarView(statusView).init();//将view设置到状态栏
}
最后一项采用标题栏渐变色的时候需要在相应的布局文件中添加一个view
<View
android:id="@+id/status_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@drawable/statusbar_green_gradient"/>
到此为止,基本上就可以处理一般的问题。但是问题1中的②和问题2还没有解决,在上面的基础上继续:
问题1中的②:全屏但是顶部存在一些控件(比如布局头部是一个图片为背景的布局,顶部有返回按钮和更多按钮),处理方法可以是给这个顶部的控件布局动态添加一个本机状态栏高度的marginTop。
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp.setMargins(0,StatusBarUtil.intStatusView(),0,0);//设置的marginTop是计算得出的本机的状态栏高度
rlay_title.setLayoutParams(lp);
最后也就是问题2:在fragment切换时的状态栏颜色的改变了。这里,Activity设置全屏的基础上,将标题栏写在fragment的布局中了,同样在fragment布局中根据需要在头部添加一个view,然后在代码中设置view的高度为状态栏高度并设置背景色。
<View
android:id="@+id/top_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
top_view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, StatusBarUtil.intStatusView()));
top_view.setBackgroundColor(ContextCompat.getColor(getActivity(),R.color.sys_red));
statusBarColor不加的这种可能会引起键盘顶起底部布局的问题。
【END】本文就说到这里。
沉浸式状态栏的博文:
Android关于沉浸式状态栏的一些总结