如何防止软键盘出现在我的Activity中?

Tho*_*mas 6 android soft-keyboard

我正在编写一个以全屏横向模式运行的Android游戏,并在窗口的左下角和右下角放置了按钮.问题是其中一个按钮是(在许多手机上)菜单按钮旁边,因此播放器可能会意外按下菜单.

如果短暂按下,我只需暂停游戏并显示游戏内菜单.没问题.

但如果按下按钮的时间更长,Android会打开屏幕下半部分的软键盘.由于它阻碍了,并且在此Activity中完全没用,我想禁用它.

我尝试了以下方法.

通过InputMethodManager

发件人:在没有任何键盘操作的情况下隐藏软键盘

由于我只有一个视图(a GLSurfaceView)我在我的尝试中Activity.onCreate():

InputMethodManager imm = ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE));
imm.hideSoftInputFromInputMethod(glSurfaceView.getApplicationWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)

它不起作用:菜单长按时软键盘仍然出现.

通过AndroidManifest.xml

来自:如何阻止Android软键盘在我的整个应用程序中出现

我把它添加到我的清单中:

<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>
Run Code Online (Sandbox Code Playgroud)

还有很多东西.

那么......还有办法吗?怎么样?

Tho*_*mas 12

至少,这是我当前问题的解决方案.无论按下按钮多长时间,它都会显示游戏内菜单.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    // From the docs:
    // "Note that in order to receive this callback, someone in the event [chain]
    // must return true from onKeyDown(int, KeyEvent) and call startTracking() on the event."
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // Override default handling, and don't pop up the soft keyboard.
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        openOptionsMenu();
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

但感觉就像是黑客,所以我希望有人能提出更好的解决方案.


Fal*_*rri 3

但如果按住按钮的时间更长,Android 会在屏幕下半部分打开软键盘。

你有什么手机?你确定吗?我从来没有见过这种情况发生,我只是尝试了一下,但它在我的手机上不起作用。

另外,这听起来像是一个用户问题。不要试图颠覆用户。如果用户真的想在您的应用程序中打开键盘,您应该让他们打开,如果没有用,他们会回击,键盘就会消失。

更令人担忧的问题应该是您的按钮离菜单按钮太近了。