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

时间:2011-01-13 15:27:12

标签: android soft-keyboard

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

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

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

我尝试了以下方法。

通过InputMethodManager

来自:Hide soft keyboard on activity without any keyboard operations

由于我只有一个视图(GLSurfaceView),因此我在Activity.onCreate()中尝试了此视图:

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

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

通过AndroidManifest.xml

来自:How to stop the android soft keyboard from ever coming up in my entire application

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

<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>

还有很多东西。

所以......还有办法吗?怎么样?

4 个答案:

答案 0 :(得分: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);
}

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

答案 1 :(得分:3)

  

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

你有什么手机?你确定吗?我从来没有见过这种情况发生过,我只是尝试过它而且我的手机无法正常工作。

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

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

答案 2 :(得分:0)

请尝试使用hideSoftInputFromWindow()。根据文件:

  

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

答案 3 :(得分:0)

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