在开发过程中, 有的时候会出现需求就是将状态栏和标题栏一样的颜色.下面给出实现代码
PS:有的时候可能会出现让你实现白色的状态栏, 那你就可以告诉你的UI或者产品了, 你做不到.在我知道的里面,好像只有魅族和小米能够实现.其他的手机型号是不能将上方的电池栏里面东西变成黑色的.白色的沉浸式状态栏只能实现成灰白色的.
导入依赖:compile ‘com.gyf.barlibrary:barlibrary:2.2.5’
1.在你的Activity的onCreate()和onDestroy()方法中加入如下代码.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//初始化,默认透明状态栏和黑色导航栏
ImmersionBar.with(this).init();
}
@Override
protected void onDestroy() {
super.onDestroy();
//不调用该方法,如果界面bar发生改变,在不关闭app的情况下,退出此界面再进入将记忆最后一次bar改变的状态
ImmersionBar.with(this).destroy();
}
2.上面的如果不能满足你的需求 那么可以自定义一些属性
ImmersionBar.with(this)
.transparentStatusBar() //透明状态栏,不写默认透明色
.transparentNavigationBar() //透明导航栏,不写默认黑色
.transparentBar() //透明状态栏和导航栏,不写默认状态栏为透明色,导航栏为黑色
.statusBarColor(R.color.colorPrimary) //状态栏颜色,不写默认透明色
.navigationBarColor(R.color.colorPrimary) //导航栏颜色,不写默认黑色
.barColor(R.color.colorPrimary) //同时自定义状态栏和导航栏颜色
.statusBarAlpha(0.3f) //状态栏透明度,不写默认0.0f
.navigationBarAlpha(0.4f) //导航栏透明度,不写默认0.0F
.barAlpha(0.3f) //状态栏和导航栏透明度,不写默认0.0f
.statusBarDarkFont(true) //状态栏字体是深色,不写默认为亮色
.flymeOSStatusBarFontColor(R.color.btn3) //修改flyme OS状态栏字体颜色
.fullScreen(true) //有导航栏的情况下,activity全屏显示
.hideBar(BarHide.FLAG_HIDE_BAR) //隐藏状态栏或导航栏或两者,不写默认不隐藏
.addViewSupportTransformColor(toolbar) //设置支持view变色,可以添加多个view,不指定颜色,默认和状态栏同色,还有两个重载方法
.titleBar(view) //解决状态栏和布局重叠问题,任选其一
.statusBarView(view) //解决状态栏和布局重叠问题,任选其一
.fitsSystemWindows(true) //解决状态栏和布局重叠问题,任选其一,默认为false,当为true时一定要指定statusBarColor(),不然状态栏为透明色
.supportActionBar(true) //支持ActionBar使用
.statusBarColorTransform(R.color.orange) //状态栏变色后的颜色
.navigationBarColorTransform(R.color.orange) //导航栏变色后的颜色
.barColorTransform(R.color.orange) //状态栏和导航栏变色后的颜色
.removeSupportView(toolbar) //移除指定view支持
.removeSupportAllView() //移除全部view支持
.addTag("tag") //给以上设置的参数打标记
.getTag("tag") //根据tag获得沉浸式参数
.reset() //重置所以沉浸式参数
.keyboardEnable(true) //解决软键盘与底部输入框冲突问题,默认为false
.init(); //必须调用方可沉浸式
3.写到这里就可以实现沉浸式状态栏了, 但是你会发现你的界面会从屏幕最上方开始浦建,导致你的状态栏会覆盖你的部分布局
解决办法:在你的XML文件的根布局上加入代码
android:fitsSystemWindows="true"