我正在编写一款以全屏横向模式运行的Android游戏,并在窗口的左下角和右下角放置了按钮。问题是其中一个按钮(在许多手机上)就在菜单按钮旁边,因此播放器可能会意外按下菜单。
如果短暂按下,我只需暂停游戏并显示游戏内菜单。没问题。
但如果按住按钮的时间更长,Android会打开屏幕下半部分的软键盘。由于它阻碍了,并且在此活动中完全没用,我想禁用它。
我尝试了以下方法。
来自:Hide soft keyboard on activity without any keyboard operations
由于我只有一个视图(GLSurfaceView
),因此我在Activity.onCreate()
中尝试了此视图:
InputMethodManager imm = ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE));
imm.hideSoftInputFromInputMethod(glSurfaceView.getApplicationWindowToken(), 0);
它不起作用:菜单长按时软键盘仍然出现。
来自:How to stop the android soft keyboard from ever coming up in my entire application
我把它添加到我的清单中:
<activity
android:windowSoftInputMode="stateAlwaysHidden"
>
还有很多东西。
所以......还有办法吗?怎么样?
答案 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”。 我认为这是阻止视图上升的最佳选择。