我正在使用 haxe/openfl 和 flashdevelop ide 开发一个应用程序。新项目的默认设置带有正确配置的 android list ,因此 android 菜单栏不会显示。但是,当我触摸设备上的任何地方时,它们会弹出。我怎样才能防止这种情况发生。
好的,所以我找到了系统用来生成应用程序代码的模板 GameActivity.java 文件并将其修改为包括:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus) {
hideSystemUi();
}
}
private void hideSystemUi() {
View decorView = this.getWindow().getDecorView();
if (Float.valueOf(android.os.Build.VERSION.RELEASE.substring(0, 3))>=4.4){
decorView.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_STICKY);
}
else
{
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}
}
现在一切正常。当 8 小时结束时,将发布此作为答案
最佳答案
你在寻找 Immersive Sticky Mode在 Android 4.4+ 上隐藏菜单栏和软件按钮。您通过 View.setSystemUiVisibility 方法设置标志是正确的。
但是,要记住的一件事是,在沉浸式粘滞模式下,如果您使用硬件音量按钮,菜单栏将重新出现。为防止出现这种情况,您必须使用延迟的 Runnable 再次设置沉浸式粘滞模式。您使用的是 OpenFL,因此下面是我在 GameActivity 中使用的一组修改:
private void setSystemUiVisibility() {
::if WIN_FULLSCREEN::
::if (ANDROID_TARGET_SDK_VERSION >= 19)::
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
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_STICKY
);
}
::elseif (ANDROID_TARGET_SDK_VERSION >= 16)::
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LOW_PROFILE |
View.SYSTEM_UI_FLAG_FULLSCREEN
);
}
::end::
::end::
}
private final Runnable activateImmersiveMode = new Runnable() {
@Override
public void run() {
setSystemUiVisibility();
}
};
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
mHandler.postDelayed(activateImmersiveMode, 500);
}
return super.onKeyDown(keyCode, event);
}
@Override protected void onResume() {
super.onResume();
setSystemUiVisibility();
// rest of onResume()
}
@Override protected void onStart() {
super.onStart();
setSystemUiVisibility();
// rest of onStart()
}
关于android - Haxe:如何让 android 菜单栏保持隐藏状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539709/