Android:在所有编辑文本中禁用软键盘

Android:在所有编辑文本中禁用软键盘,android,android-edittext,Android,Android Edittext,我正在Android上制作一个对话框,里面有一些EditTexts。 为了禁用软键盘,我在onCreate()中放置了这一行: Keypad.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 问题是,它只在对话框出现且不执行任何操作时工作。 当我移动到下一个EditText时,键盘会出现而不会下降 有人知道如何解决这个问题吗?创建自己的类,扩展EditTex

我正在Android上制作一个对话框,里面有一些
EditText
s。 为了禁用软键盘,我在
onCreate()
中放置了这一行:

Keypad.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
问题是,它只在对话框出现且不执行任何操作时工作。 当我移动到下一个
EditText
时,键盘会出现而不会下降


有人知道如何解决这个问题吗?

创建自己的类,扩展
EditText
并重写
onCheckIsTextEditor()

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edSearch.getWindowToken(), 0);

如果查看onCheckIsTextEditor()方法实现(在TextView中),它看起来如下所示:

@Override
public boolean onCheckIsTextEditor() {
    return mInputType != EditorInfo.TYPE_NULL;
}
这意味着您不必子类化,只需:

((EditText) findViewById(R.id.editText1)).setInputType(InputType.TYPE_NULL); 

我尝试在layout xml中设置android:inputType=“none”,但它对我不起作用,所以我用编程的方式进行了设置。

这篇文章发表已经有一段时间了,但这里有一个简单的方法对我有效:在xml中,在
EditText
属性中,执行:
android:focusable=“false”
。现在,即使用户单击键盘,键盘也不会弹出。如果您提供自己的键盘,这将非常有用。

我整天都在寻找解决方案,我发现了这种方法。我把它放在这里是因为它似乎完美地回答了这个问题

EditText et = ... // your EditText
et.setKeyListener(null) //makes the EditText non-editable so, it acts like a TextView.

不需要子类。这与使您的EditText不可聚焦的主要区别在于,EditText仍然有自己的光标-您可以选择文本等。它所做的只是禁止IME弹出自己的软键盘。

在我的情况下,禁用ANDROID软输入键盘xml文件没有帮助 在java文件中的EditText对象上调用setInputType方法非常有效。 这是代码

EditTextInputObj = (EditText) findViewById(R.id.EditTextInput);
EditTextInputObj.setInputType(InputType.TYPE_NULL); 

知道为时已晚,但您是否尝试了以下设置来编辑版面中的文本

android:inputType="none"
更新

使用


将其放入Oncreate方法中

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
试试这个

edittext.setInputType(InputType.TYPE_NULL);      
if (android.os.Build.VERSION.SDK_INT >= 11)   
{  
    edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);  
    edittext.setTextIsSelectable(true);  
}

如果将TextView放入视图组,则可以使用以下命令使视图在其任何子体之前获得焦点:

view.setDescendantFocusability(view.FOCUS_BLOCK_DESCENDANTS);

通过设置EditText focusable->false,单击时键盘不会打开

<EditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:focusable="false" />

您可以这样做:

textView.setOnClickListener(null);

它将禁用文本视图的键盘,单击将不再起作用。

调用
文本视图。设置ShowSoftInputInfo(false)
。这个方法是从API级别21开始记录的,但从API级别16开始就已经存在了(它只是对JavaDoc隐藏)。我在AlertDialog中将它与API级别16结合使用,并与
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u INPUT\u STATE\u ALWAYS\u HIDDEN)
结合使用

在API级别14中,有一个隐藏方法
setSoftInputShownOnFocus()
,它似乎具有相同的用途,但我还没有测试过



InputType.TYPE_NULL
相比,它的优势在于,所有正常的输入类型都可以使用(例如,用于密码输入),触摸事件将光标定位在文本中的正确位置。

为什么要这样做?我有自己想要使用的键盘,我不希望每次单击EditText时软键盘都会启动我已经尝试过了,但是当我从对话框扩展时,我没有“getSystemService()”方法。你可以在你的构造函数中传递activity或applicationcontext。这没有帮助,软键盘在我移动到下一个EditText时仍然出现。修改你的清单,它阻止我运行findViewById()。我得到了类强制转换异常。我忘了提到,我不想禁用EditText,我有自己编写的键盘并想使用它。您需要将编辑文本定义为xml中的NoImeEditText(这是您的自定义EditText),然后NoImeEditText et=(NoImeEditText)findViewById(R.id.itsId)应该可以工作。你可以处理onFocusChange,如果et.hasFocus()显示你的键盘。我现在尝试了,我得到了另一个交换。我认为XML找不到新的编辑文本。异常:04-27 14:59:39.590:错误/AndroidRuntime(3006):由以下原因引起:java.lang.ClassNotFoundException:android.view.NoImeEditText在布局xml的加载器dalvik.system.PathClassLoader[/data/app/com.keypadTest-2.apk]中使用对自定义控件的完全限定引用:当我使用它时,只有第一行文本可见:(.并非所有数据都显示。在某些设备中,以编程方式设置null not work。这将阻止与EditText的任何触摸交互(即长按并选择)。这可能不是许多开发人员想要的效果…请不要使用如此多的句点。只有一个句点就可以了。我想禁用EditText,但setOnClickListener仍然可以工作。在这种情况下,这很有效。不,它不起作用。键盘仍然使用此属性。它对您有效吗?我的不好。它不起作用!W使用tab emulator并启用了物理键盘。让我做一点实验,更新或删除此评论。感谢您的快速响应。Ohk,尝试了一些东西!下面的答案很有效。例如,手动设置
editText#设置InputType
0
InputType。TYPE\u NULL
这种方法不好吗如果有任何积极的建议???@Yaniv:一旦你确认你阅读了我的评论,我将删除这篇文章,因为它不起作用。谢谢!
editText.setInputType(InputType.TYPE\u NULL)
editText.setFocusable(false)
一起为我工作[API:19]@VenoM这是Superrbb!!太棒了!文本仍然有光标和可选择项,但api 9怎么了?嗨,Aleksey..谢谢..!!!!的edittext.setInputType(InputType.TYPE_NULL)“对APi 8非常有效……但当我在API14中测试时,它不起作用……这就是为什么我添加了If条件……谢谢,在使edittext内容不可编辑后正在寻找一种方法使其可选择。与:edittext.setInputType(EditorInfo.TYPE_NULL)完美结合使用;虽然此代码可以回答此问题,但最好包含关于其功能的说明或额外信息。Tr
<EditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:focusable="false" />
textView.setOnClickListener(null);