如何在特定的活动中禁用Android软键盘?

12

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

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

我尝试通过添加到清单中来隐藏键盘

android:windowSoftInputMode="stateAlwaysHidden"

我在Manifest文件中为特定的活动设置了这个属性,但是这对我来说不起作用,因为一旦用户点击EditText,键盘就会再次出现。

我已经尝试使用如下方式进行编程实现:

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

但那也不起作用。当用户点击EditText时,键盘就会出现。

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

EditText.setInputType(InputType.TYPE_NULL);

但是我不能使用这个方法,因为它会允许连接键盘的用户在 EditText 字段中输入字母和其他符号,而我希望每个人都只使用小键盘输入数据。

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

6个回答

6

我认为可以扩展EditText并通过它处理对软键盘的访问,然后发现了这个问题,它有一个非常优雅的解决方案。

我按照步骤操作,这对我完美地处理了软键盘。希望能帮助其他遇到此问题的人。


6
在任何需要禁用软键盘的编辑框中,都可以在该编辑框的xml属性中添加相应的属性。
<EditText android:id=".."
          ..
          android:focusable="false" />

它将停止软键盘的执行。

2
你不应该这样做。如果是这样的话,那么从先前的EditText字段中点击下一个按钮也无法使此视图请求焦点。 - lokoko

4
您可以尝试这个方法,对我有效:

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

4

在manifest文件中的activity中使用 android:windowSoftInputMode="stateHidden"。这样做就可以了。除非你不想输入文本,否则不要使用 android:focusable="false" 用于EditText。如果你想输入文本,则需要从布局文件中删除该属性。


3
看起来这个方法不起作用:当选择 EditText 时,软键盘仍然会弹出。我认为 windowSoftInputMode 属性是设计用于控制窗口接收焦点时的活动行为,而不是一直生效。 - personne3000
这对我想要的东西起作用:在活动开始时不显示软键盘。 - adrian4aes

0

如果你正在使用ViewGroup,它允许你使用这种方法阻止软键盘:

view.setDescendantFocusability(view.FOCUS_BLOCK_DESCENDANTS);

由于这个,视图在其任何子项之前将获得焦点。


-2

你可以使用这段代码:

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

聚焦和启用会导致EditText行为混乱。 - Safeer
除非您不想输入文本,否则请勿在EditText中使用android:focusable="false"。这是一个糟糕的解决方案。 - Глеб Буткевич

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接