如何阻止android软键盘出现在我的整个应用程序中

如何阻止android软键盘出现在我的整个应用程序中,android,android-hardware,Android,Android Hardware,我正在一个硬件设备上开发一个应用程序,它有一个内置的硬件键盘,不会滑出,所以总是可见的(比如黑莓)。因此,我永远不希望在整个应用程序中显示软键盘。我知道这会给出以下代码行: InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 但我不知道该把这

我正在一个硬件设备上开发一个应用程序,它有一个内置的硬件键盘,不会滑出,所以总是可见的(比如黑莓)。因此,我永远不希望在整个应用程序中显示软键盘。我知道这会给出以下代码行:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
但我不知道该把这些代码放在哪里,以便在我的活动中可能出现的所有地方隐藏软键盘。我已尝试将代码添加到
Activity.onUserInteraction
中,但无效。似乎是在执行
onUserInteraction
后出现键盘

我还尝试将以下内容添加到我的



软键盘仍然出现。

您的应用程序不应执行任何操作。该设备的固件应该包含一个基于硬件键盘可见而禁止软键盘的配置,就像其他所有具有硬件键盘的Android设备一样。如果没有发生这种情况,请与硬件制造商联系,看看他们是否计划解决这个问题。

一个简单的解决方案,用于明天的演示:

我会用空视图创建一个新的IME。这里有两个开源项目供您查看一些代码


如果您想了解有关输入法的更多信息,请转至。

如果EditText的inputType为0,则选中该EditText时,软键盘将永远不会弹出

EditText editText = findViewById(R.id.edit_text); editText.setInputType(0); EditText EditText=findviewbyd(R.id.edit\u text); editText.setInputType(0); 这当然需要对应用程序中的所有EditText执行,或者您可以始终将EditText子类化,并在构造函数中将输入类型设置为0


设置xml inputType参数将不起作用,因为这对应于对setRawInputType方法的调用,该方法不会删除KeyListener。

我通过在稍微定制的EditText中重写OnCheckTextEditor方法解决了这个问题

@Override
public boolean onCheckIsTextEditor() {
    return false;
}

如果您曾经编辑过文本,请将此代码放入

edittext.setInputType(InputType.TYPE_NULL);      
if (android.os.Build.VERSION.SDK_INT >= 11)   
{  
    edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);  
    edittext.setTextIsSelectable(true);  
}

谢谢,但这无助于我明天做演示。还有其他想法吗?根据我对文档的阅读,
android:windowSoftInputMode=“stateAllwayshidden”
应该已经做到了。我可以确认它不起作用,至少在安卓2.0.1和2.1上是这样。我怀疑有一个bug--我已经在上提交了一个问题。当然,这对你明天的生活毫无帮助-(检测软键盘已出现的唯一方法是检测内容视图已调整大小的事实。因此,扩展布局的根
ViewGroup
是什么,覆盖
onSizeChanged()
,然后尝试
hideOffInputFromWindow()
在那一点上。感谢您提交错误报告。我投了赞成票。我也感谢您的回答——我最终采用了供应商的方法,正如我对问题的评论所解释的那样。我在演示中绕过这个问题的方法是关闭整个手机的Android键盘:“设置->语言和键盘->Android键盘(取消选中)"。由于手机配备了一个始终可见的硬键盘,这似乎无论如何都是合适的。感谢Commonware和Macarse,他们为遇到此问题的任何人提供了很好的指导。还有一件事,如果你发现自己处于同样的情况,请按照Commonware评论中的链接访问Android bug 7115然后点击星星来投票。
edittext.setInputType(InputType.TYPE_NULL);      
if (android.os.Build.VERSION.SDK_INT >= 11)   
{  
    edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);  
    edittext.setTextIsSelectable(true);  
}