使用SYSTEM_UI_FLAG_HIDE_NAVIGATION后,requestLayout无法反映更改

时间:2018-10-21 13:21:34

标签: android android-layout

我正在使用以下代码/标志来隐藏底部的导航栏,但问题是我的活动视图本身不会重新绘制/刷新/重新布局以反映此更改。

id()

我的活动代码

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
   int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
   View decorView = getWindow().getDecorView();
   decorView.setSystemUiVisibility(uiOptions);
}

RootRelativeLayout.requestLayout();

即使我在父级RelativeLayout上调用requestLayout(),内部的RelativeLayout仍会保留在其位置,就好像导航栏仍然存在并且不会掉到屏幕底部一样。

如您在图片中看到的,底部有一个缺口 enter image description here

我找到了解决此问题的方法,但它也引起了另一个问题。

我来到的解决方案是将android:fitsSystemWindows设置为false而不是true。

但这会导致一个问题,我的活动的顶部对齐视图位于状态栏后面,我唯一的解决方案是将顶部填充设置为状态栏的高度。

2 个答案:

答案 0 :(得分:0)

对于将来的搜索者,解决方案是将fitsSystemWindows设置为false。

android:fitsSystemWindows="false"

答案 1 :(得分:0)

当过多的全屏标志传递给setSystemUiVisibility时,会发生这种情况。有了这个组合,我没有观察到问题:

myRelativeLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

当我确实遇到问题时,android:fitsSystemWindows =“ false”未能解决。