Android三方框架设置通知栏的ImmersionBar

  • 这个框架很强大,整合了Android各个版本,厂商,最大限度的实现了状态栏的设置,官网地址:https://github.com/gyf-dev/ImmersionBar
  • 首先使用,官方文档很详细但是要想快速理解上手,还有点疑惑,因为方法太多,要看明白你需要下载demo好好研究,如果你没时间研究就快速使用,那就看下去吧!
  • 首先在基类baseactivity设置,这个是普遍用的,一次声明继承就生效了,就看用法吧 onCreate 方法加入
   if (isImmersionBarEnabled()) {
            initImmersionBar();
        }
  • 这个解释一下,官网说的意思是他isImmersionBarEnabled方法默认返回true,所以在你不想使用这个方法的界面直接重写这个方法返回fase就行了,
    protected boolean isImmersionBarEnabled() {
        return true;
    }
 protected void initImmersionBar() {
        //在BaseActivity里初始化
        ImmersionBar.with(this)
                .statusBarColor(R.color.transparent)     //状态栏颜色,不写默认透明色
                .statusBarDarkFont(true) //原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度
                .fitsSystemWindows(true)
                .keyboardEnable(true)
                .navigationBarColor(R.color.virtual_buttons)
                .init();

//        ImmersionBar.with(this)//黑底白字
//                .statusBarColor(R.color.text_dark)     //状态栏颜色,不写默认透明色    //状态栏颜色,不写默认透明色
//                //  .statusBarDarkFont(true) //原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度
//                .fitsSystemWindows(true)
//                .keyboardEnable(true)
//                .navigationBarColor(R.color.virtual_buttons)
//                .init();
    }
  • 介绍一下这个方法.init,点进去看看默认是沉浸式了已经,然后你想设置什么属性直接链式设置就行了,这个一开始我就没理解,始终不知道沉浸式怎么设置,如果你不想沉浸式你就加一个方法,这个方法是设置和通知栏重叠的,
.fitsSystemWindows(true)
  • 看一下.init
  /**
     * 通过上面配置后初始化后方可成功调用
     */
    public void init() {
        //更新Bar的参数
        updateBarParams();
        //设置沉浸式
        setBar();
        //适配状态栏与布局重叠问题
        fitsLayoutOverlap();
        //适配软键盘与底部输入框冲突问题
        fitsKeyboard();
        //变色view
        transformView();
    }
  • 所以一旦初始化就默认沉浸式了,不想要沉浸式直接设置就好了,很简单,ondestory就不说了
 if (isImmersionBarEnabled()) {
            // 必须调用该方法,防止内存泄漏
            ImmersionBar.with(this).destroy();
        }
  • 重点来讲一下基类写过后子类怎么覆盖或者自定义自己需要的
  • 暴力的是在oncreate方法中设置完布局setContentView()后直接ImmersionBar.with(this).destroy();然后在重新建立
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        ImmersionBar.with(this).destroy();
        ImmersionBar.with(this)
                .titleBar(null, false)
                .transparentBar()
                .fullScreen(true)
                .hideBar(BarHide.FLAG_HIDE_BAR)  //隐藏状态栏或导航栏或两者,不写默认不隐藏
                .init();
        getLogin();
    }
  • 但是要在本页ondestory记得销毁
  • 或者还有个方法,经典啊 、.reset();直接重置,然后重新设置,不用再次销毁了
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        ImmersionBar.with(this)
                .reset()
                .titleBar(null, false)
                .transparentBar()
                .fullScreen(true)
                .hideBar(BarHide.FLAG_HIDE_BAR)  //隐藏状态栏或导航栏或两者,不写默认不隐藏
                .init();
        getLogin();
    }
  • 还有一种就是在子类activity中重写isImmersionBarEnabled()方法,返回fase,重新创建,但是要销毁生命周期方法中。这几种是我理解的使用方式,如果不正确多谢指出啊!
  • 有一种情况是mainactivity中的fragment,假如有三个,俩个要沉浸式,一个不要,怎么办,官方提供了两种解决办法,* 第一种,你的Fragment直接继承SimpleImmersionFragment或者ImmersionFragment类,在initImmersionBar方法中实现沉浸式代码,只有当immersionBarEnabled返回为true才可以走initImmersionBar方法哦,不过immersionBarEnabled默认返回已经为true了,如果当前Fragment不想走沉浸式方法,请将immersionBarEnabled设置为false
  • 第二种,如果你的Fragment不能继承SimpleImmersionFragment或者ImmersionFragment类,请参考SimpleImmersionFragment实现SimpleImmersionOwner接口,或者参考ImmersionFragment实现ImmersionOwner接口,直接抄过来了,亲测都好用,我自己觉得没有那么麻烦,直接在mainactivity中全部设置沉浸式,在子类fragment中动态设置一下标题高度就行了,标题高度= title+通知栏



            

                

                    

                    


                


                

                    


                

                

                

            
        

  • 设置高度 getStatusBarHeight()。这个方法是本库提供的 直接用,他取得就是通知栏高度
  LinearLayout frg_first_head = view.findViewById(R.id.frg_first_head);
        frg_first_head.setPadding(0,getStatusBarHeight(), 0,0);
  • 三个都这样设置一下就OK了,具体的还有很多,需要看看demo,祝大家工作愉快!

你可能感兴趣的:(Android三方框架设置通知栏的ImmersionBar)