Haxe:如何使android菜单栏保持隐藏状态 [英] Haxe: How can I make the android menu bar stay hidden

查看:71
本文介绍了Haxe:如何使android菜单栏保持隐藏状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用haxe/openfl和flashdevelop ide开发一个应用程序.新项目的默认设置随附正确配置的android清单,以便android菜单栏不显示.但是,当我触摸设备上的任何位置时,它们都会弹出.我该如何防止这种情况发生.

Im developing an app using haxe / openfl, with the flashdevelop ide. The default setup for a new project comes with the correctly configured android manifest so that the android menu bars dont show up. However when I touch anywhere on the device they pop up. How can I prevent this from happening.

好的,所以我找到了系统用来生成应用程序代码的模板GameActivity.java文件,并将其修改为包括以下内容:

Okay, so I found the the template GameActivity.java file that the system was using to generate the apps code and modified it to include:

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

现在一切正常.八小时后将发布此答案作为答案

Now its all working nicely. Will post this as answer when the 8 hours are up

推荐答案

您追求的是

You're after Immersive Sticky Mode that hides manu bars and software buttons on Android 4.4+. You've got it correct with setting flags via View.setSystemUiVisibility method.

但是,要记住的一件事是,在沉浸式粘滞模式下,如果您使用硬件音量按钮,菜单栏将重新出现.为防止这种情况,您必须使用延迟的Runnable来重新设置沉浸式粘滞模式".您正在使用OpenFL,因此以下是我在GameActivity中使用的一组修改:

However, one thing to keep in mind is that in Immersive Sticky Mode the menu bars will reappear if you use hardware volume buttons. To prevent it, you'll have to use a delayed Runnable that sets Immersive Sticky Mode again. You're using OpenFL so below is a set of modifications I use in my 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()
}

这篇关于Haxe:如何使android菜单栏保持隐藏状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆