强制 android libgdx 进入沉浸模式

Force android libgdx into immersive mode

遵循此页面上的教程(2009 年编写)不再有效。 http://www.androidsnippets.com/how-to-make-an-activity-fullscreen

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"

截图如下:

在网上搜索了几个小时后,我找不到任何可以帮助我的文章。 那么,在 libgdx 的 1.5.4 版本中,如何获得 immersive full screen

----编辑---- 这是现在完全可用的代码:

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);
    }
}

在 android activity:

试试这个
@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 级或以上。

遗憾的是,由于我目前的声誉,我无法发表评论, 但是我发现添加:

config.hideStatusBar = true;
config.useImmersiveMode = true;

在 AndroidLauncher class 中足以以沉浸式方式显示应用程序,但应用程序将以标准模式启动,然后更新为沉浸式模式,有关 Android 的更多信息沉浸式模式:

When you use the SYSTEM_UI_FLAG_IMMERSIVE_STICKY flag, an inward swipe in the system bars areas causes the bars to temporarily appear in a semi-transparent state, but no flags are cleared, and your system UI visibility change listeners are not triggered. The bars automatically hide again after a short delay, or if the user interacts with the middle of the screen.

Android sdk page
所以我的结论是 config.useImmersiveMode 使用粘性标志。

附带说明一下, @TargetApi(Build.VERSION_CODES.HONEYCOMB) 当目标 api lvl 小于 11

时,必须添加到 OnWindowFocusChanged 方法