【问题标题】:Immersive mode activity transition沉浸式模式活动转换
【发布时间】:2020-02-04 14:55:27
【问题描述】:

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

所有活动都在清单中设置了 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);
    }

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

【问题讨论】:

    标签: android fullscreen android-immersive


    【解决方案1】:

    在清单活动标签中使用此代码

    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>
    

    在你的活动类中使用它

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    

    这对我有用。

    【讨论】:

      【解决方案2】:

      您不需要设置全局布局监听器。只需在super.onCreate() 之前调用setFullscreen 函数

      【讨论】:

      • 这很好用,但我需要 GlobalLayoutListener 以便在打开键盘后再次隐藏导航栏以在 EditText 上书写。也许如果我在活动创建后设置监听器,我可以避免栏出现在活动打开...
      • 已解决,只是在super.onCreate() 之前添加了setFullscreen() 调用,没有其他更改。
      猜你喜欢
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多