Android 覆盖操作栏被状态栏遮挡
我试图让我的应用程序在真正的全屏(没有状态栏,没有动作栏)和“正常模式”(动作栏和状态栏)之间切换。为此,我在覆盖模式下设置了一个操作栏,并允许用户切换操作栏和状态栏:Android 覆盖操作栏被状态栏遮挡,android,android-actionbar,overlay,statusbar,Android,Android Actionbar,Overlay,Statusbar,我试图让我的应用程序在真正的全屏(没有状态栏,没有动作栏)和“正常模式”(动作栏和状态栏)之间切换。为此,我在覆盖模式下设置了一个操作栏,并允许用户切换操作栏和状态栏: getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); actionBar.show()
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
actionBar.show();
…和关闭:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
actionBar.hide();
这可以正常工作,但只有一个例外:无论何时发生这些操作,都会调整实际布局的大小。显然,还有另一个标志要说明这一点,因此我将其添加到我的onCreate()
:
好的,现在调整大小不再是一个问题,但是现在只要状态栏同时打开,我的操作栏就会被状态栏遮住一半:
有什么我遗漏的吗?如何使操作栏正确显示在状态栏的正下方?经过反复试验,我找到了解决方案。这会隐藏动作栏和状态栏,而不会导致图像调整大小
private void toggleFullscreen(boolean on) {
ActionBar actionBar = getActionBar();
View decorView = getWindow().getDecorView();
if (on) {
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN);
actionBar.hide();
}
else {
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
actionBar.show();
}
}
既然你可以直接显示和隐藏,为什么还要使用flag呢。我尝试过使用
decorView.setSystemMiviability(View.SYSTEM\u UI\u FLAG\u FULLSCREEN)
,但它似乎与上述方法没有任何区别。影响调整大小的唯一标志是flag\u LAYOUT\u NO\u LIMITS
,它会导致动作栏被剪裁。
private void toggleFullscreen(boolean on) {
ActionBar actionBar = getActionBar();
View decorView = getWindow().getDecorView();
if (on) {
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN);
actionBar.hide();
}
else {
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
actionBar.show();
}
}