沉浸式全屏在4.4以下的系统中

19

我有一个应用程序,我想让它全屏运行。如果我有一台安装了4.4 KitKat系统的设备,那么设置SYSTEM_UI_FLAG_IMMERSIVE以使应用程序进入纯全屏模式很容易。 然而,如果我的设备使用低于4.4版本的API,我就不知道如何使它全屏,就像具有沉浸式支持的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);
        }
}

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


如果使用现有的标志就可以实现沉浸模式,为什么你认为谷歌会添加特定的标志呢? - ianhanniballake
3
当然,他们添加了旗帜,因为没有旗帜无法解决那个问题。针对低于4.3的应用程序如何解决全屏显示的问题?我可以接受导航栏可见,但是我想在向下滑动时显示状态栏和操作栏。这是否可能或者我必须重新考虑?@ianhanniballake - jdahlgren
@jdahlgren,你找到解决方案了吗? - N Sharma
4个回答

3
这是你最接近的答案:
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版本。


5
对于使用旧版API的用户,发表粗鲁的评论是没有生产性的。 - hotzst
5
我以为这是一个技术论坛,而不是社交论坛。严肃地说,SDK 10 是 Gingerbread。考虑到 Froyo 分布仅占0.2%,我们正在谈论所有设备的3.2%(http://developer.android.com/about/dashboards/index.html)。 - ShellDude

1

我曾经遇到同样的情况,经过一些研究,我发现在4.4以下由于安全问题是不可能实现的,而且旧的API不支持按您所希望的方式隐藏导航栏。

尽管从API 4.1开始使用SYSTEM_UI_FLAG_LAYOUT_STABLE标志,您的布局不会调整大小并且会在导航栏后面填充,但您需要确保没有重要的UI组件被覆盖。

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


0

只需将以下代码复制粘贴到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

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