美文网首页
QMUI_Android状态栏相关

QMUI_Android状态栏相关

作者: Merlin_720 | 来源:发表于2019-10-11 15:32 被阅读0次

    最近用了一下QMUI_Android这个整体的ui框架,详细的不多说有很多的解释,今天想聊一下状态栏的问题。
    如果你继承了QMUIActivity这个activity的话,那么你的状态栏就会跟着背景颜色一样。因为有个需求状态栏的颜色要蓝色的,但是整个界面的背景是白色的,一开始想的是自己处理一下就可以了。结果多出来一块跟状态栏一样高的白色的横条就像下边这样


    白条.png

    因为我们了解setFitsSystemWindows这个方法是设置不是直接到状态栏的 我们贴一下这个方法

     /**
         * Sets whether or not this view should account for system screen decorations
         * such as the status bar and inset its content; that is, controlling whether
         * the default implementation of {@link #fitSystemWindows(Rect)} will be
         * executed.  See that method for more details.
         *
         * <p>Note that if you are providing your own implementation of
         * {@link #fitSystemWindows(Rect)}, then there is no need to set this
         * flag to true -- your implementation will be overriding the default
         * implementation that checks this flag.
         *
         * @param fitSystemWindows If true, then the default implementation of
         * {@link #fitSystemWindows(Rect)} will be executed.
         *
         * @attr ref android.R.styleable#View_fitsSystemWindows
         * @see #getFitsSystemWindows()
         * @see #fitSystemWindows(Rect)
         * @see #setSystemUiVisibility(int)
         */
        public void setFitsSystemWindows(boolean fitSystemWindows) {
            setFlags(fitSystemWindows ? FITS_SYSTEM_WINDOWS : 0, FITS_SYSTEM_WINDOWS);
        }
    

    所以我在Activity设置false但是运行的还是有一条。fragment设置也是这样。百思不得其解。
    直到我看了一下QMUIActivity他的源码,找到了原因

    
        @Override
        public void setContentView(int layoutResID) {
            SwipeBackLayout swipeBackLayout = SwipeBackLayout.wrap(this,
                    layoutResID, dragBackEdge(), mSwipeCallback);
    //就是这个地方,
            if (translucentFull()) {
                swipeBackLayout.getContentView().setFitsSystemWindows(false);
            } else {
                swipeBackLayout.getContentView().setFitsSystemWindows(true);
            }
            mListenerRemover = swipeBackLayout.addSwipeListener(mSwipeListener);
            super.setContentView(swipeBackLayout);
        }
    

    接下来我们看一下translucentFull()这个方法

    
        /**
         * Immersive processing
         *
         * @return if true, the area under status bar belongs to content; otherwise it belongs to padding
         */
        protected boolean translucentFull() {
            return false;
        }
    

    所以这个方法是控制是不是状态栏跟背景一个颜色的方法。所以我再MainActivity重写一下这个方法,返回true
    那么这个顶部那个白天就没了。下边看一下效果。

    没有白条.png
    所以整理一下。提醒一下大家遇到这个问题的时候可以不遇到这个坑。
    更多精彩请关注公众号及时接收 公众号

    相关文章

      网友评论

          本文标题:QMUI_Android状态栏相关

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