Android &引用;标志“绘制系统”栏“背景”;影响getRootView().getHeight()

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

我在尝试向状态栏添加颜色时发现了一个影响相对布局高度的问题

受相对布局rootView高度计算的影响

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库。是我做过的类似的解决方案。