如何为特定活动禁用Android Soft Keyboard?

时间:2011-05-01 20:53:56

标签: android keyboard android-edittext soft-keyboard

我有一个带有一个EditText的活动,我只需输入数字。

现在,我已经将EditText的输入类型定义为仅限数字,并为我的用户绘制了一个漂亮的键盘,但是我还需要确保在我的用户不会弹出软键盘他们点击EditText。

我尝试通过添加

来隐藏键盘
android:windowSoftInputMode="stateAlwaysHidden"

在我的Manifest中针对特定活动,但这对我不起作用,因为只要用户点击EditText,键盘就会再次出现。

我尝试过以编程方式执行相同操作

activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

但这也不起作用。用户单击EditText时会出现键盘。

唯一有效的方法是将EditType的InputType设置为null,如下所示:

EditText.setInputType(InputType.TYPE_NULL);

但我无法使用它,因为它允许键盘连接到设备的用户在EditText字段中输入字母和其他符号,而我希望每个人都专门使用键盘在字段中输入数据。 / p>

我还应该提一下,我目前正在Android 2.1下测试我的应用程序,但我希望我的解决方案适用于所有版本。任何帮助,将不胜感激。提前谢谢。

6 个答案:

答案 0 :(得分:6)

只是认为可以扩展EditText并通过那里处理对软键盘的访问,并遇到this question,这对我的问题有一个非常优雅的解决方案。

按照步骤操作,这对我来说非常适合处理软键盘。希望它可以帮助其他人遇到这个问题。

答案 1 :(得分:6)

在您需要禁用软键盘的任何Edittext中,在该编辑文本的xml中添加属性。

<EditText android:id=".."
          ..
          android:focusable="false" />

它将停止执行软键盘。

答案 2 :(得分:3)

在清单文件中使用活动中的android:windowSoftInputMode="stateHidden"。这会奏效。除非您不愿意输入文本,否则不要对EditText使用android:focusable =“false”。如果要提供输入,则删除布局文件中edittext的该属性。

答案 3 :(得分:0)

如果您使用的是ViewGroup,它允许您使用此方法阻止软键盘:

view.setDescendantFocusability(view.FOCUS_BLOCK_DESCENDANTS);

由于这一点,视图将在其任何后代之前获得焦点。

答案 4 :(得分:0)

您可以尝试一下。它对我有用:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                     WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

答案 5 :(得分:-1)

您可以使用此代码:

<EditText
    .
    .
    android:enabled="false"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:inputType="numberPassword" />