强制Android Libgdx进入沉浸模式

5

这个页面上的教程(写于2009年)已经不再适用。可以参考以下链接学习如何使活动全屏显示:https://blog.csdn.net/qq_34801488/article/details/51804870

public class FullScreen extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.main);
    }
}

同样,尝试在android.xml中更改主题没有效果:android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

以下是屏幕截图: enter image description here

在浏览网络几个小时后,我找不到任何有用的文章。那么,在libgdx 1.5.4版本中,如何获得沉浸式全屏

----编辑---- 这里是现在完全可工作的代码:

public class AndroidLauncher extends AndroidApplication {
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        hideSystemUi();

        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        config.hideStatusBar=true;
        config.useImmersiveMode=true;
        initialize(new game(), config);
    }


    private void hideSystemUi() {
        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);
    }
}
2个回答

3

在Android活动中尝试以下操作:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

请注意,此功能仅适用于API级别19或更高版本。

没有Activity类。这就是为什么第一个没有起作用的原因。 - Marc Guiselin
是的,有的:https://github.com/anubiann00b/TileArena/blob/master/android/src/game/tile/arena/android/AndroidLauncher.java你的启动器继承了Application,它又继承了Activity - Anubian Noob
哦...那我真的不知道了,抱歉 :P - Anubian Noob
1
非常感谢。View对象还有一些其他标志。这个可以工作: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); - Marc Guiselin
1
另外,我注意到除非后面跟着以下代码,否则它不起作用:config.hideStatusBar=true;config.useImmersiveMode=true; - Marc Guiselin
1
太棒了!很高兴能帮到你!你应该用你得到的回答自己回答这个问题,这对未来访问者来说会更有用。 - Anubian Noob

1
很遗憾,由于我的声誉不够,我无法发表评论。不过我发现添加以下内容可以解决这个问题:
config.hideStatusBar = true;
config.useImmersiveMode = true;

在AndroidLauncher类中,只需使用SYSTEM_UI_FLAG_IMMERSIVE_STICKY标志即可显示应用程序的沉浸模式,但是应用程序将启动为标准模式,然后更新为沉浸模式,有关Android沉浸模式的更多信息请参见:
当您使用SYSTEM_UI_FLAG_IMMERSIVE_STICKY标志时,系统栏区域内向内滑动会导致栏以半透明状态临时出现,但不会清除任何标志,并且不会触发系统UI可见性更改侦听器。栏在短暂延迟后自动隐藏,或者如果用户与屏幕中间进行交互,则会再次隐藏。 Android sdk页面,因此我的结论是config.useImmersiveMode使用粘性标志。
值得一提的是,在针对低于11个API级别的api进行定位时,必须将@TargetApi(Build.VERSION_CODES.HONEYCOMB)添加到OnWindowFocusChanged方法中。

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