2015-02-24 42 views
3

使用沉浸式模式的应用程序在等待一段时间后应用程序返回(活动已被销毁)时,会在屏幕底部留下黑条。如何防止导航栏留下黑条? (沉浸式模式)

发生了什么:(我已经启用了开发者选项:“不要保留活动”来重现这一点)。

  1. 首次启动应用程序。沉浸模式按预期工作。

  2. 向上滑动以显示“沉浸式粘性”导航栏,并使用“主页”按钮离开应用程序。导航栏的背景在应用程序关闭前简要显示黑色背景。

  3. 使用“最近”按钮,然后选择要恢复的应用程序。

  4. 该应用程序打开后短暂显示黑色栏上的导航栏。系统ui陷入沉浸式模式,但黑色条仍然存在。 systemuiblackbar

此错误也只出现在棒棒糖,不是奇巧。

我已经剥离回应用程序简单地设置从系统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); 
     } 
    } 
} 

编辑: 仅与该活动创建一个新的新项目,我已经看到了这一点后,使用应用的主题延伸时的问题转载“机器人:Theme.Holo” ...,并固定在此示例项目的问题,当我延长材料主题,而不是:

变化

<style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar.Fullscreen"> 
</style> 

<style name="AppTheme"parent="android:Theme.Material.Light.NoActionBar.Fullscreen"> 
</style> 

遗憾的是此修复程序没有解决问题,在我的主要项目,但它使我更接近解决方案,可以帮助其他有同样问题。

+0

您是否尝试过运行Hierarchy Viewer以确定该条是什么? – robotoaster 2015-02-25 16:23:15

回答

1

我遇到了同样的问题。以下是我做出的一些让它消失的更新。希望这些为你工作!

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 
    ); 
+0

你的第一个建议只为我工作。 – 2017-02-23 01:09:03

1

使用

<style name="AppTheme"parent="android:Theme.Material.Light.NoActionBar.Fullscreen"> </style> 

确实解决了这个问题,但它只适用于api:21。

为了使它适用于所有系统。您可以在res目录中创建一个名为style-v21的目录,并将该目录放置在那里。Android系统足够聪明,可以选择用于新手机还是旧手机。