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

时间:2010-03-12 00:06:01

标签: android android-hardware

我正在硬件设备上开发一个应用程序,该设备具有内置的硬件键盘,不会滑出,因此始终可见(如黑莓)。因此,我从不希望软键盘显示在我的整个应用程序中。我知道another SO question提供了以下代码行:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

但是我不知道在这个代码的哪个位置隐藏软键盘的地方可能会出现在我的Activity中。我尝试将代码添加到Activity.onUserInteraction无济于事。似乎键盘在<{i> onUserInteraction执行后出现

我还尝试将以下内容添加到<Activity>

<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>

仍然出现软键盘。

5 个答案:

答案 0 :(得分:5)

您的申请不应该做任何事情。设备的固件应包含基于硬件键盘可见的禁用软键盘的配置,就像其他具有硬件键盘的Android设备一样。如果没有发生这种情况,请与硬件制造商联系,看看他们是否打算解决这个问题。

答案 1 :(得分:2)

明天演示的简单解决方法:

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

如果您想了解有关输入法的更多信息,请转到Creating an input method

答案 2 :(得分:2)

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

EditText editText = findViewById(R.id.edit_text);
editText.setInputType(0);

当然,这需要对应用程序中的所有EditTexts进行,或者您可以始终将EditText子类化并在构造函数中将输入类型设置为0.

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

答案 3 :(得分:2)

我通过在我的一位自定义EditText中覆盖onCheckIsTextEditor方法解决了这个问题。

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

答案 4 :(得分:0)

如果您有编辑文本,请输入此代码..

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