QMUI_Android状态栏相关

2019-10-11  本文已影响0人  Merlin_720

最近用了一下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
所以整理一下。提醒一下大家遇到这个问题的时候可以不遇到这个坑。
更多精彩请关注公众号及时接收 公众号
上一篇下一篇

猜你喜欢

热点阅读