6

我正在编写一个在全屏横向模式下运行的 Android 游戏,并且按钮位于窗口的左下角和右下角。问题是这些按钮之一(在许多手机上)就在菜单按钮旁边,因此玩家可能会不小心按下菜单。

如果它被短暂按下,我只是暂停游戏并显示游戏内菜单。那里没问题。

但如果按钮被按住更长时间,Android 会在屏幕下半部分打开软键盘。由于它妨碍了它,并且在这个活动中完全没用,我想禁用它。

我尝试了以下方法。

通过 InputMethodManager

来自:在活动中隐藏软键盘,无需任何键盘操作

由于我只有一个视图(a GLSurfaceView),我在我的Activity.onCreate()

InputMethodManager imm = ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE));
imm.hideSoftInputFromInputMethod(glSurfaceView.getApplicationWindowToken(), 0);

它不起作用:软键盘仍然出现在菜单长按上。

通过 AndroidManifest.xml

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

我将此添加到我的清单中:

<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>

也无所事事。

所以……有办法吗?如何?

4

4 回答 4

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

但这感觉就像一个黑客,所以我希望有人提出更好的解决方案。

于 2011-01-13T15:29:24.843 回答
3

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

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

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

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

于 2011-01-13T18:44:01.647 回答
0

尝试改用hideSoftInputFromWindow()。根据文档:

请求从当前接受输入的窗口的上下文中隐藏软输入窗口。

于 2011-01-13T16:23:03.867 回答
0

在 android 清单中使用 android:windowSoftInputMode="adjustPan"。我认为这是防止视图上升的最佳选择。

于 2011-11-16T06:46:16.447 回答