在我的应用程序中,我有一个EditText,用户只有读访问权,没有写访问权。

在代码中,我设置android:enabled="false"。

虽然EditText的背景变成了黑色,但当我点击它时,键盘就会弹出来,我可以更改文本。

我应该设置什么来禁用EditText?


当前回答

这将使您的编辑文本被禁用。

editText.setEnabled(false);

通过使用这个

editText.setInputType(InputType.TYPE_NULL);

将使您的Edittext不显示您的软键盘,但如果它连接到物理键盘,它将允许您输入。

其他回答

从@渐近线对已接受答案的评论中,使用:

myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);

...鲍勃是你的叔叔。

在类中设置以下属性:

editText.setFocusable(false);
editText.setEnabled(false);

它会像你要求的那样顺利工作。

在我的情况下,我需要我的EditText滚动文本,如果没有。当它被禁用时,行数超过maxLines。这个实现非常适合我。

private void setIsChatEditTextEditable(boolean value)
{
    if(value)
    {
        mEdittext.setCursorVisible(true);
        mEdittext.setSelection(chat_edittext.length());
       // use new EditText(getApplicationContext()).getKeyListener()) if required below
        mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener());  
    }
    else
    {
        mEdittext.setCursorVisible(false);
        mEdittext.setKeyListener(null);
    }
}

您可以尝试以下方法:

 private void disableEditText(EditText editText) {
    editText.setFocusable(false);
    editText.setEnabled(false);
    editText.setCursorVisible(false);
    editText.setKeyListener(null);
    editText.setBackgroundColor(Color.TRANSPARENT); 
 }

启用EditText:

禁用EditText:

这对我有用,希望能帮到你。

我相信正确的方法是设置android:editable="false"。

如果你想知道为什么我的链接指向TextView的属性,你的答案是,因为EditText从TextView继承:

EditText是一个薄薄的贴面 配置自身为的TextView 可编辑的。

更新: 正如下面的评论中提到的,editable已弃用(从API级别3开始)。您应该使用inputType(值为none)。