沉浸式模式 activity 过渡

Immersive mode activity transition

我已经成功将应用程序设置为沉浸模式,因为我想隐藏状态栏(在顶部屏幕)和导航栏(在底部屏幕)。 问题是,当 activity 更改时,底栏会自动出现,然后立即下降并消失。 我想避免这种情况。

所有活动都具有在清单中设置的 AppTheme.NoActionBar 样式:

android:theme="@style/AppTheme.NoActionBar"

并且在OnCreate中都有如下代码:

getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() { 
                 GlobalFunctions.setFullscreen(getWindow().getDecorView());
                    }
                });

这里是 setFullscreen() 函数:

public static void setFullscreen(View decorView){
        int ui_Options = 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;
        decorView.setSystemUiVisibility(ui_Options);
    }

我应该在 activity 生命周期的 onCreate 之前设置这些属性吗?或者还有其他解决方案?或者我以错误的方式实现了沉浸式模式?

您不需要设置全局布局侦听器。只需在 super.onCreate()

之前调用 setFullscreen 函数

在清单 activity 标签中使用此代码

android:theme="@style/AppFullScreenTheme"

在 style.xml

中创建此样式
    <style name="AppFullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:fontFamily">@font/montserrat</item>
    <item name="android:windowContentOverlay">@null</item>
 </style>

否则在您的 activity class

中使用它
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

这对我有用。