繁体   English   中英

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

[英]How to disable Android Soft Keyboard for a particular activity?

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

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

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

android:windowSoftInputMode="stateAlwaysHidden"

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

我试过像这样以编程方式做同样的事情

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

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

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

EditText.setInputType(InputType.TYPE_NULL);

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

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

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

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

它将停止执行软键盘。

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

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

在清单文件中的活动中使用android:windowSoftInputMode="stateHidden" 这将起作用。 除非您不愿意输入文本,否则请勿将 android:focusable="false" 用于 EditText。 如果要提供输入,请删除布局文件中 edittext 的该属性。

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

view.setDescendantFocusability(view.FOCUS_BLOCK_DESCENDANTS);

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

你可以试试这个。 它对我有用:

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

您可以使用此代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM