android - "FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS"影响 getRootView().getHeight()

标签 android android-relativelayout android-5.0-lollipop nexus-5

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

adding Flag影响相对布局 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));
        }
    }

我有一个 View 树观察器,可以帮助我跟踪 rootView 的高度。

private ViewTreeObserver.OnGlobalLayoutListener keyboardLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            int heightDiff = wrapper.getRootView().getHeight() - wrapper.getHeight();
}
如果我使用 FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

int heightDiff 等于 1920 但如果我不使用 changeStatusBarColor()int heightDiff 等于 1776(我猜是在没有操作栏和状态栏的情况下计算的)。 但是为什么添加这个标志改变计算呢? 提前致谢!

最佳答案

在我的案例中,问题出现在 SlidingMenu 库中。这是一个solution .

关于android - "FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS"影响 getRootView().getHeight(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372113/

相关文章:

java - 在android工作室:how I can create two tables with references?

java - 错误:任务 ':app:dexDebug'的执行失败。 > com.android.ide.common.process.ProcessException:

android - 如何从 SherlockFragment 获取 Context 并启动 Activity

android - 如何在android中声明arraylist来存储整数和字符串?

java - Android:扩展 Linearlayout,但 RelativeLayout 也需要相同。重复代码不可避免?

android - 屏幕锁定时,来自服务的对话框未显示在 Lollipop 上

android - 从自定义对话框顶部删除额外的空间

android - 在 RelativeLayout 中设置 minHeight,禁用 alignBaseline?

KitKat(及更低版本)设备上的 Android Material Design

android - 清除 Android 5+ 目录树选择器 (ACTION_OPEN_DOCUMENT_TREE) 中的历史记录(最近的文件夹)