安卓沉浸式模式转换

3

我有一个使用沉浸式模式的安卓应用程序,所有活动都采用全屏模式。

我有一个BaseActivity类,所有其他活动都继承自此类。在这个活动中,我调用以下内容以启用全屏/沉浸式:

HelmiBlankActivity:

private boolean apiLowerImmersive = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

   if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
        apiLowerImmersive = true;
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

}


@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

  if(hasFocus && !apiLowerImmersive ) {
        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);
    }
}

在活动中,它的表现非常出色,但问题是:当打开一个新的活动(通过意图)时,操作栏/标题栏会短暂显示然后再次隐藏 - 这似乎有点卡顿/有bug。
应用程序还有一个主题: styles.xml:
<style name="FullscreenTheme" parent="android:Theme.Holo.Light">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
</style>

我尝试了使用android:Theme.Holo.Light.NoActionBar,但是在过渡期间并没有成功。我在stackoverflow(顺便提一下,这是一个很棒的社区,帮助了我很多问题)或者其他任何地方都找不到相关信息,希望得到您的帮助。

1个回答

3
如果您将此片段放入onCreate()方法中,则您的活动将以已隐藏的状态打开。
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);

你也可以为旧的SDK添加条件。我对这个设置唯一的问题是,一旦我向下滑动以显示工具栏,它们就无法再隐藏...


谢谢 - 它解决了!关于条形图不消失的问题:这只发生在一些设备上 - 找不到任何线索是什么原因。 - gambo
1
为了让状态栏再次自动隐藏,您应该使用SYSTEM_UI_FLAG_IMMERSIVE_STICKY而不是SYSTEM_UI_FLAG_IMMERSIVE。 - thiagolr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接