状态栏自动透明,黑色字体,不影响输入框顶起来布局

利用一个第三方库实现透明,解决了很多异常情况

地址:https://github.com/gyf-dev/ImmersionBar

    implementation 'com.gyf.barlibrary:barlibrary:2.3.0'

  1. 在baseActivity里onCreate()方法里初始化
mImmersionBar = ImmersionBar.with(this);
        mImmersionBar
                .transparentStatusBar()  //透明状态栏,不写默认透明色
                .statusBarDarkFont(true)   //状态栏字体是深色,不写默认为亮色
                .flymeOSStatusBarFontColor(R.color.title_bar_txt)  //修改flyme OS状态栏字体颜色
                .keyboardEnable(false)
                .navigationBarEnable(false);
        if ((!"Xiaomi".equalsIgnoreCase(getManufacturer())&&
                (!"ZTE".equalsIgnoreCase(getManufacturer())))
                &&(!"MEIZU".equalsIgnoreCase(getManufacturer()))) {
            mImmersionBar.statusBarAlpha(0.2f);  //状态栏透明度,不写默认0.0f
        }
        KLog.i("手机型号:"+getManufacturer());
        mImmersionBar.init();
  1. 在baseactivity的onDestory()里
if (mImmersionBar != null)
            mImmersionBar.destroy();  //必须调用该方法,防止内存泄漏,不调用该方法,如果界面bar发生改变,在不关闭app的情况下,退出此界面再进入将记忆最后一次bar改变的状态
        
  1. 然后其他activity继承即可,布局里别忘了
android:fitsSystemWindows="true"
  1. 然后这个库有个问题,就是页面根布局是RelativeLayout且有输入框的情况下,输入法弹出时会把底部的布局顶上来,或者会多一块白色黑色布局
  2. 解决这个问题,此活动就不能使用这个工具做透明工具栏了,单独设置透明、白色状态栏黑字体样式了。可以用SystemBarTint这个工具透明,设置颜色。
  3. 设置字体黑色可以使用下方代码:
private void initDarkFont() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;  //防止系统栏隐藏时内容区域大小发生变化
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !OSUtils.isEMUI3_1()) {
                uiFlags = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; //android 6.0以上设置状态栏字体为暗色
            }
            getWindow().getDecorView().setSystemUiVisibility(uiFlags);
        }
    }

这样就把所有页面都能正确透明。

你可能感兴趣的:(状态栏自动透明,黑色字体,不影响输入框顶起来布局)