我正在为Android上的对话框工作,其中包含几个EditText
。 我在onCreate()
中加入了以下代码以禁用软键盘:
Keypad.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
问题在于它只有在对话框出现且不做任何操作时才起作用。
当我移动到下一个EditText
时,键盘出现并且不会消失。
是否有人有解决这个问题的想法?
我正在为Android上的对话框工作,其中包含几个EditText
。 我在onCreate()
中加入了以下代码以禁用软键盘:
Keypad.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
问题在于它只有在对话框出现且不做任何操作时才起作用。
当我移动到下一个EditText
时,键盘出现并且不会消失。
是否有人有解决这个问题的想法?
如果您查看onCheckIsTextEditor()方法的实现(在TextView中),它看起来像这样:
@Override
public boolean onCheckIsTextEditor() {
return mInputType != EditorInfo.TYPE_NULL;
}
这意味着你不需要子类化,你可以直接这样做:((EditText) findViewById(R.id.editText1)).setInputType(InputType.TYPE_NULL);
我尝试在布局的XML文件中设置android:inputType="none",但对我没有用,所以我最终使用编程方式实现。
创建一个继承 EditText
并重写 onCheckIsTextEditor()
方法的自定义类:
public class NoImeEditText extends EditText {
public NoImeEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onCheckIsTextEditor() {
return false;
}
}
试一试这个...
edittext.setInputType(InputType.TYPE_NULL);
if (android.os.Build.VERSION.SDK_INT >= 11)
{
edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);
edittext.setTextIsSelectable(true);
}
TextView.setShowSoftInputOnFocus(false)
方法。该方法自 API 级别 21 开始记录文档,但实际上自 API 级别 16 就已经存在(只是被隐藏在 JavaDoc 中)。我在 AlertDialog 中与 dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
结合使用 API 级别 16。
在 API 级别 14 中,有一个隐藏的方法 setSoftInputShownOnFocus()
,其目的似乎相同,但我尚未测试过。
相对于 InputType.TYPE_NULL
的优点是,所有正常的输入类型都可以使用(例如用于密码输入),而且触摸事件会将光标定位到文本中的正确位置。
我整天都在寻找这个问题的解决方案,然后我发现了这种方法。我将它放在这里,因为它似乎完美地回答了这个问题。
EditText et = ... // your EditText
et.setKeyListener(null) //makes the EditText non-editable so, it acts like a TextView.
无需子类化。与使您的EditText不可聚焦的区别在于,EditText仍然具有自己的光标-您可以选择文本等。它所做的只是抑制IME弹出其自己的软键盘。
距离这篇文章发布已经有一段时间了,但以下方法对我非常有效:在XML文件中的EditText
属性中添加 android:focusable="false"
。这样即使用户点击它,键盘也不会弹出。如果您提供自己的键盘,这将非常有用。
可能现在已经晚了,但您是否尝试在布局中对EditText进行以下设置呢?
android:inputType="none"
更新
使用,
editText.setInputType(InputType.TYPE_NULL)
editText.setFocusable(false)
editText#setInputType
设置为0
或InputType.TYPE_NULL
。这种方法是否不好,因为没有人给出任何积极的建议?@Yaniv:一旦您确认已阅读我的评论,我将删除此帖子,因为它无法起作用。谢谢! - VenoMeditText.setInputType(InputType.TYPE_NULL)
结合 editText.setFocusable(false)
对我很有用 [API: 19] - VenoMgetWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
textView.setOnClickListener(null);
这将禁用textView的键盘,点击将不再起作用。
view.setDescendantFocusability(view.FOCUS_BLOCK_DESCENDANTS);