我正在编写一款以全屏横向模式运行的 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/