如何为特定活动禁用Android软键盘?

如何为特定活动禁用Android软键盘?,android,keyboard,android-edittext,soft-keyboard,Android,Keyboard,Android Edittext,Soft Keyboard,我有一个只需要输入数字的编辑文本的活动 现在,我已经将EditText的输入类型定义为“仅数字”,并为用户绘制了一个漂亮的键盘供用户使用,但是我还需要确保当用户单击EditText时,不会弹出软键盘 我尝试通过添加 android:windowSoftInputMode="stateAlwaysHidden" 在特定活动的清单中,但这对我不起作用,因为一旦用户单击EditText,键盘就会再次出现 我也尝试过这样通过编程来做同样的事情 activity.getWindow().setSoftI

我有一个只需要输入数字的编辑文本的活动

现在,我已经将EditText的输入类型定义为“仅数字”,并为用户绘制了一个漂亮的键盘供用户使用,但是我还需要确保当用户单击EditText时,不会弹出软键盘

我尝试通过添加

android:windowSoftInputMode="stateAlwaysHidden"
在特定活动的清单中,但这对我不起作用,因为一旦用户单击EditText,键盘就会再次出现

我也尝试过这样通过编程来做同样的事情

activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
但这也不行。当用户单击编辑文本时,键盘出现

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

EditText.setInputType(InputType.TYPE_NULL);
但我不能使用它,因为它将允许将键盘连接到设备的用户在EditText字段中输入字母和其他符号,而我希望每个人都只使用键盘在字段中输入数据


我还应该提到,我目前正在安卓2.1下测试我的应用程序,但我希望我的解决方案能够跨所有版本工作。任何帮助都将不胜感激。提前谢谢。

我只是认为可以扩展EditText,并通过它处理对软键盘的访问,然后遇到了一个非常优雅的解决方案


只需按照这些步骤操作,就可以完美地为我处理软键盘。希望它能帮助其他遇到此问题的人。

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

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


它将停止软键盘的执行。

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

如果您使用的是例如ViewGroup,则允许您使用以下方法阻止软键盘:

view.setDescendantFocusability(view.FOCUS_BLOCK_DESCENDANTS);
由于这一点,视图将在其任何后代之前获得焦点

您可以使用以下代码:

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

您可以试试这个。这对我很有用:

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

你不应该那样做。如果是这种情况,那么从上一个EditText字段中,单击Next不会使此视图成为requestFocus。这似乎不起作用:选择EditText时,软键盘仍然打开。我相信WindowsOfInputMode属性是设计用来控制窗口接收焦点时活动的行为的,而不是所有时间。这符合我的要求:在活动开始时不显示软键板焦点,启用会导致Edittext行为混乱