使用沉浸式模式的应用会在等待一段时间(活动被销毁)后返回应用时在屏幕底部留下黑条。
发生了什么:(我启用了开发人员选项:“不要保留活动”来重现这一点)。
首次推出该应用。沉浸式模式按预期工作。
向上滑动以显示“沉浸式粘性”导航栏,然后使用“主页”按钮离开应用。在应用关闭之前,导航栏的背景会短暂显示黑色背景。
使用“最近”按钮,然后选择要恢复的应用。
该应用程序打开以在黑条上短暂显示导航栏。系统ui折叠成沉浸式模式,但黑色条仍然存在。
此错误也只出现在Lollipop上,而不是KitKat上。
除了设置系统UI标志之外,我已经删除了应用程序以简单地启动虚拟活动而没有任何功能:
public class DummyActivity extends FragmentActivity {
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
setSystemUiVisibility();
}
}
public void setSystemUiVisibility() {
if (getWindow() != null && getWindow().getDecorView() != null) {
getWindow().getDecorView().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_STICKY);
}
}
}
编辑: 在创建一个只有这个Activity的新的新项目后,我在使用扩展“android:Theme.Holo”的应用主题时再次看到了这个问题...并在我扩展Material主题时解决了这个示例项目中的问题:< / p>
更改
<style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar.Fullscreen">
</style>
到
<style name="AppTheme"parent="android:Theme.Material.Light.NoActionBar.Fullscreen">
</style>
不幸的是,这个修复程序并没有解决我的主项目中的问题,但它让我更接近解决方案,并可能帮助其他人解决同样的问题。
答案 0 :(得分:2)
我遇到了同样的问题。以下是我所做的一些更新,让它消失了。希望其中一个适合你!
activity_main.xml中
android:fitsSystemWindows="false"
式-V21
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowSharedElementsUseOverlay">false</item>
MainActivity.java
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_FULLSCREEN
);
答案 1 :(得分:1)
使用
<style name="AppTheme"parent="android:Theme.Material.Light.NoActionBar.Fullscreen"> </style>
确实解决了这个问题,但它只适用于api:21。
为了使其适用于所有系统。您可以在res目录中创建名为style-v21的目录,并将该style.xml放在那里。 Android系统非常智能,可以选择用于新手机或旧手机的手机。
答案 2 :(得分:0)
对我来说,顶部是一个黑色的条。关键是活动风格:
// Important to draw behind cutouts
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
这是我的代码:
1-活动中
private fun hideSystemUI() {
sysUIHidden = true
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
window.decorView.systemUiVisibility = (
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
// Hide the nav bar and status bar
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // Hide nav bar
or View.SYSTEM_UI_FLAG_FULLSCREEN // Hide status bar
)
}
private fun showSystemUI() {
sysUIHidden = false
window.decorView.systemUiVisibility = (
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // layout Behind nav bar
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // layout Behind status bar
)
}
2-在xml布局的根视图中
android:fitsSystemWindows="false"
3-全屏活动的样式:
<style name="FullscreenTheme" parent="AppTheme">
<item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowBackground">@null</item>
<item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
<item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
<item name="android:statusBarColor">#50000000</item>
<item name="android:navigationBarColor">#50000000</item>
// Important to draw behind cutouts
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar">
<item name="android:background">@color/sysTransparent</item>
</style>