强制 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 方法
遵循此页面上的教程(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 方法