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

标签 android soft-keyboard

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

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

但是如果按住按钮的时间更长,Android 会在屏幕的下半部分打开软键盘。因为它妨碍了,并且在这个 Activity 中完全没用,所以我想禁用它。

我尝试了以下方法。

通过 InputMethodManager

发件人:Hide soft keyboard on activity without any keyboard operations

因为我只有一个 View (一个 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

我将此添加到我的 list 中:

<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>

也有很多什么都不做。

那么……有什么办法吗?怎么办?

最佳答案

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

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

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

关于android - 如何防止软键盘出现在我的 Activity 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4681743/

相关文章:

Android Softkeyboard 在 edittext 中输入数值非常慢

android - WebView 和软键盘问题

javascript - 如何检测Android浏览器隐藏软键盘事件?

android - 强制 Idea 生成 R.Java 文件的最简单方法是什么?

android - 微调器内文本的颜色

android - 渲染期间引发异常 : java. lang.System.arraycopy([CI[CII)V 异常详细信息记录在窗口 > 显示 View > 错误日志中

java - Android 软键盘问题

android - 在 RecyclerView 中的一行内单击处理按钮

android - 如何使 .getCurrentUser() 返回非空?

android - 如何为Android自定义键盘设置不同的按键背景