Android &引用;标志“绘制系统”栏“背景”;影响getRootView().getHeight()
我在尝试向状态栏添加颜色时发现了一个影响相对布局高度的问题 受相对布局rootView高度计算的影响Android &引用;标志“绘制系统”栏“背景”;影响getRootView().getHeight(),android,android-relativelayout,android-5.0-lollipop,nexus-5,Android,Android Relativelayout,Android 5.0 Lollipop,Nexus 5,我在尝试向状态栏添加颜色时发现了一个影响相对布局高度的问题 受相对布局rootView高度计算的影响 private void changeStatusBarColor(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.addFlags(WindowManager.LayoutP
private void changeStatusBarColor(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(getResources().getColor(R.color.red_e31837));
}
}
我有一个视图树观察者,可以帮助我跟踪rootView的高度
private ViewTreeObserver.OnGlobalLayoutListener keyboardLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = wrapper.getRootView().getHeight() - wrapper.getHeight();
}
int-heightDiff
等于1920,如果我使用FLAG\u DRAWS\u SYSTEM\u BAR\u BACKGROUNDS
但是如果我不使用changeStatusBarColor()
,int-heightDiff
等于1776(我想计算时没有操作栏和状态栏)。
但为什么要添加此标志更改计算?
提前谢谢 在我的例子中,问题发生在滑动菜单库中。这是一个。如果您传入该标志,窗口管理器将在系统栏区域为您提供额外的绘图空间。设置状态栏颜色不需要传入该标志,只需调用
setStatusBarColor(int)
@alanv谢谢我理解了原因;但若我不使用标志,状态栏的颜色不会改变。我一开始就试过了。你知道为什么会这样吗?@MiloRambaldi,嗨!你解决了这个问题吗?在我的项目中,当我调用setStatusBarColor(int)
状态栏颜色不变;但是,如果我在设置状态栏颜色之前添加标志,如下所示:window.addFlags(WindowManager.LayoutParams.flag\u drawins\u SYSTEM\u BAR\u BACKGROUNDS)代码>状态栏颜色更改。我仍然对此感到困惑。@BArtWell我希望有人能解决这个问题:)非常感谢。它也适用于AndroidResideMenu库。是我做过的类似的解决方案。