【问题标题】:Immersive fullscreen below 4.44.4以下沉浸式全屏
【发布时间】:2014-03-06 07:36:43
【问题描述】:

我有一个想要全屏运行的应用。如果我有一个 4.4 KitKat 的设备,很容易设置 SYSTEM_UI_FLAG_IMMERSIVE 以使应用程序变为纯全屏。 但是,如果我有一个 API 低于 4.4 的设备。我不知道如何让它全屏,就好像它是具有沉浸式支持的 KitKat。

我可以设置全屏,并隐藏导航标志以使应用程序进入全屏状态,但是一旦单击屏幕,这些标志就会重置,现在将同时显示导航栏和状态栏。

有没有一种解决方案可以让我在带有 JB 和可能的 ICS 的设备上“模拟”沉浸式模式(不一定在下面)。

我有一个方法 hideSystemUI 在OnSystemUiVisibilityChangeListener 触发时运行,目前看起来像这样。

private void hideSystemUI() {
        actionBar.hide();
        isMenuVisible = false;
        if (currentapiVersion >= android.os.Build.VERSION_CODES.KITKAT){
            mDecorView.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);
        }
        else{
            mDecorView.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);
        }
}

我需要进行哪些更改才能使应用全屏显示,而不是在每次点击时显示导航栏和状态栏,而是从顶部或底部滑动。

【问题讨论】:

  • 如果可以使用现有标志,您认为 Google 为什么会为沉浸式模式添加特定标志?
  • 好吧,他们当然添加了标志,因为没有标志可以解决这个问题。针对
  • @jdahlgren 你找到解决方案了吗?

标签: android fullscreen android-4.4-kitkat android-fullscreen android-4.2-jelly-bean


【解决方案1】:

这是你将要得到的最接近的:

if (Build.VERSION.SDK_INT >= 19) {
    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
} else {
    if (Build.VERSION.SDK_INT > 10) {
        findViewById(android.R.id.content).setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
    }
}

并且不支持 SDK 小于 10 的设备。无论如何,那些小丑们需要获得现代 android。

【讨论】:

  • 无论出于何种原因,对使用旧 API 版本的用户进行粗鲁的评论都是徒劳的。
  • 我以为这是一个技术论坛,而不是社交论坛。说真的,SDK 10 是姜饼。考虑到 0.2% 的 Froyo 分布,我们说的是所有设备的 3.2% (developer.android.com/about/dashboards/index.html)。
【解决方案2】:

我也遇到过同样的情况,经过一些研究,我发现由于安全问题,低于 4.4 是不可能的,所以旧的 API 不支持按照你想要的方式隐藏导航栏。 即使从 API 4.1 开始,您使用 SYSTEM_UI_FLAG_LAYOUT_STABLE 标志,您的布局也不会调整大小并且会在导航栏后面膨胀,但您需要确保它不会覆盖您的重要 UI 组件。

https://developer.android.com/training/system-ui/immersive.html 希望这会有所帮助..:)

【讨论】:

    【解决方案3】:

    只需将下面的代码复制到 value/style.xml。

    <resources>
    
    
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    
    </style>
    
    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
    
    </style>
    

    【讨论】:

      【解决方案4】:

      沉浸模式有两种方法
      为了让它保持身临其境,请改变这条线

      View.SYSTEM_UI_FLAG_IMMERSIVE
      

      通过这条线-

      View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-25
        • 1970-01-01
        • 2014-03-07
        • 2013-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多