美文网首页
Android三方框架设置通知栏的ImmersionBar

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

作者: jiangbin1992 | 来源:发表于2019-07-18 18:19 被阅读0次
    • 这个框架很强大,整合了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
    <LinearLayout
                android:id="@+id/frg_first_head"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
    
    
                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/dp_50"
                    android:background="@color/white">
    
                    <RelativeLayout
                        android:id="@+id/home_rl5"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:layout_centerVertical="true">
    
                        <ImageView
                            android:id="@+id/frag_head_jpush"
                            android:layout_width="@dimen/dp_21"
                            android:layout_height="@dimen/dp_21"
                            android:layout_centerVertical="true"
                            android:layout_marginLeft="@dimen/dp_15"
                            android:src="@mipmap/frag_first_jpush" />
    
                        <TextView
                            android:id="@+id/home_red"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginStart="@dimen/dp_29"
                            android:layout_marginTop="@dimen/dp_8"
                            android:background="@drawable/shape_message"
                            android:paddingLeft="@dimen/dp_3"
                            android:paddingRight="@dimen/dp_3"
                            android:text=""
                            android:textColor="@color/white"
                            android:textSize="@dimen/sp_8"
                            android:visibility="invisible" />
    
    
                    </RelativeLayout>
    
    
                    <RelativeLayout
                        android:id="@+id/head_search"
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/dp_35"
                        android:layout_centerInParent="true"
                        android:layout_marginLeft="@dimen/dp_10"
                        android:layout_marginRight="@dimen/dp_15"
                        android:layout_toLeftOf="@+id/frag_head_history"
                        android:layout_toRightOf="@+id/home_rl5"
                        android:background="@drawable/shape_search_gray">
    
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="match_parent"
                            android:layout_marginLeft="@dimen/dp_15"
                            android:drawableLeft="@mipmap/head_search"
                            android:drawablePadding="@dimen/dp_5"
                            android:gravity="center_vertical"
                            android:text="请输入关键词"
                            android:textColor="@color/text_gray"
                            android:textSize="12sp" />
    
    
                    </RelativeLayout>
    
                    <ImageView
                        android:id="@+id/frag_head_history"
                        android:layout_width="@dimen/dp_21"
                        android:layout_height="@dimen/dp_21"
                        android:layout_centerVertical="true"
                        android:layout_marginRight="@dimen/dp_15"
                        android:layout_toLeftOf="@+id/frag_head_scan"
                        android:src="@mipmap/head_history"
                        android:visibility="gone" />
    
                    <ImageView
                        android:id="@+id/frag_head_scan"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentEnd="true"
                        android:layout_centerVertical="true"
                        android:layout_marginRight="@dimen/dp_10"
                        android:padding="@dimen/dp_5"
                        android:scaleType="centerCrop"
                        android:src="@mipmap/head_scan" />
    
                </RelativeLayout>
            </LinearLayout>
    
    
    • 设置高度 getStatusBarHeight()。这个方法是本库提供的 直接用,他取得就是通知栏高度
      LinearLayout frg_first_head = view.findViewById(R.id.frg_first_head);
            frg_first_head.setPadding(0,getStatusBarHeight(), 0,0);
    
    • 三个都这样设置一下就OK了,具体的还有很多,需要看看demo,祝大家工作愉快!

    相关文章

      网友评论

          本文标题:Android三方框架设置通知栏的ImmersionBar

          本文链接:https://www.haomeiwen.com/subject/fmkrlctx.html