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

我正在编写一个以全屏横向模式运行的Android游戏,并在窗口的左下角和右下角放置了按钮。问题是其中一个按钮是(在许多手机上)菜单按钮旁边,因此播放器可能会意外按下菜单。 如果短暂按下,我只需暂停游戏并显示游戏内菜单。没问题。 但如果按下按钮的时间更长,Android会打开屏幕下半部分的软键盘。由于它阻碍了,并且在此Activity中完全没用,我想禁用它。 我尝试了以下方法。 通过InputMethodManager 发件人:在没有任何键盘操作的情况下隐藏软键盘 由于我只有一个视图(一个
GLSurfaceView
),我在我的
Activity.onCreate()
中试过这个:
InputMethodManager imm = ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE));
imm.hideSoftInputFromInputMethod(glSurfaceView.getApplicationWindowToken(), 0);
它不起作用:菜单长按时软键盘仍然出现。 通过AndroidManifest.xml 来自:如何阻止Android软键盘在我的整个应用程序中出现 我把它添加到我的清单中:
<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>
还有很多东西。 那么......还有办法吗?怎么样?     
已邀请:
  但如果按下按钮的时间更长,   Android打开了软键盘   屏幕的下半部分。 你有什么手机?你确定吗?我从来没有见过这种情况发生过,我只是尝试过它而且我的手机无法正常工作。 此外,这听起来像一个用户问题。不要试图颠覆用户。如果用户真的想要在你的应用程序中打开一个键盘,你应该让它们,如果它没用,它们会回击它会消失。 一个更令人担忧的问题应该是你的按钮离菜单按钮太近了。     
至少,这是我当前问题的解决方案。无论按下按钮多长时间,它都会显示游戏内菜单。
@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);
}
但感觉就像是黑客,所以我希望有人能提出更好的解决方案。     
请尝试使用hideSoftInputFromWindow()。根据文件:   请求从当前正在接受输入的窗口的上下文中隐藏软输入窗口。     
在android清单中使用android:windowSoftInputMode =“adjustPan”。 我认为这是阻止视图上升的最佳选择。     

要回复问题请先登录注册