最近用了一下QMUI_Android这个整体的ui框架,详细的不多说有很多的解释,今天想聊一下状态栏的问题。
如果你继承了QMUIActivity这个activity的话,那么你的状态栏就会跟着背景颜色一样。因为有个需求状态栏的颜色要蓝色的,但是整个界面的背景是白色的,一开始想的是自己处理一下就可以了。结果多出来一块跟状态栏一样高的白色的横条就像下边这样
因为我们了解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
那么这个顶部那个白天就没了。下边看一下效果。
所以整理一下。提醒一下大家遇到这个问题的时候可以不遇到这个坑。
更多精彩请关注公众号及时接收