Android - 横向覆盖的导航栏
Android - navigation bar with overlay in landscape
在我的应用程序中,我试图让导航栏覆盖 activity 的内容。在纵向模式下,它工作正常。导航栏覆盖内容。
当我将方向更改为横向时,屏幕右侧会出现导航栏。在这种横向模式下,导航栏不会覆盖我的内容。
我已经实现了打开和关闭全屏模式的功能。当我在横向模式下打开全屏时,由于没有覆盖导航栏,我的 activity 内容跳到了左边。
以前,我的目标是 sdk 版本 18,它运行良好。现在我的目标是 sdk 版本 22,我遇到了这个问题。
在我的 onCreate
中,我有这些行:
if (Build.VERSION.SDK_INT > 17) {
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN);
} else {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
开启全屏模式的方法如下:
protected void fullscreenOn() {
if (mActivity != null && !mSearchModeOn) {
Window window = mActivity.getWindow();
View decorView = window.getDecorView();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View
.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View
.SYSTEM_UI_FLAG_IMMERSIVE);
} else {
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
mActionBar.hide();
}
mActionBar.hide();
bottomBarsLayout.setVisibility(View.GONE);
mIsFullscreenOn = true;
}
}
奇怪的是,它在纵向上工作正常,但在横向上却不行。有人可以帮助我吗?
更新
注意: 在我的布局中,我已将 fitsSystemWindow
属性设置为 true
。
更新 2
我为纵向和横向使用相同的布局。另外,我注意到这种奇怪的行为只出现在 Android 5 (API 21) 及更高的设备上。我在带有 KitKat 的设备上对其进行了测试,它运行良好。
我终于解决了这个问题。我在 activity.
的样式中添加了以下行
<item name="android:windowDrawsSystemBarBackgrounds" tools:ignore="NewApi">false</item>
在我的应用程序中,我试图让导航栏覆盖 activity 的内容。在纵向模式下,它工作正常。导航栏覆盖内容。 当我将方向更改为横向时,屏幕右侧会出现导航栏。在这种横向模式下,导航栏不会覆盖我的内容。 我已经实现了打开和关闭全屏模式的功能。当我在横向模式下打开全屏时,由于没有覆盖导航栏,我的 activity 内容跳到了左边。 以前,我的目标是 sdk 版本 18,它运行良好。现在我的目标是 sdk 版本 22,我遇到了这个问题。
在我的 onCreate
中,我有这些行:
if (Build.VERSION.SDK_INT > 17) {
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN);
} else {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
开启全屏模式的方法如下:
protected void fullscreenOn() {
if (mActivity != null && !mSearchModeOn) {
Window window = mActivity.getWindow();
View decorView = window.getDecorView();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View
.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View
.SYSTEM_UI_FLAG_IMMERSIVE);
} else {
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
mActionBar.hide();
}
mActionBar.hide();
bottomBarsLayout.setVisibility(View.GONE);
mIsFullscreenOn = true;
}
}
奇怪的是,它在纵向上工作正常,但在横向上却不行。有人可以帮助我吗?
更新
注意: 在我的布局中,我已将 fitsSystemWindow
属性设置为 true
。
更新 2
我为纵向和横向使用相同的布局。另外,我注意到这种奇怪的行为只出现在 Android 5 (API 21) 及更高的设备上。我在带有 KitKat 的设备上对其进行了测试,它运行良好。
我终于解决了这个问题。我在 activity.
的样式中添加了以下行<item name="android:windowDrawsSystemBarBackgrounds" tools:ignore="NewApi">false</item>