如何在代码中复制android:editable ="false"?

Ang*_*ker 42 android android-edittext

在布局中,您可以通过以下方式将EditText窗口小部件设置为不可编辑android:editable attribute.

我怎么能在代码中这样做?我需要EditText根据条件使小部件可编辑.

小智 38

editText.setFocusable(false);
editText.setClickable(false);
Run Code Online (Sandbox Code Playgroud)

这样可以确保EditText无法选择和聚焦控件,因此无法进行编辑.

  • 但它也无法选择和复制. (12认同)

小智 28

我自己试过这个,

要禁用编辑文本:

.setFocusable(false);
Run Code Online (Sandbox Code Playgroud)

这也将setFocusableInTouchMode设置为false!

要启用编辑文本:

setFocusableInTouchMode(true);
Run Code Online (Sandbox Code Playgroud)

这也将setFocusable设置为true;


Chr*_*rry 15

执行此操作的最佳方法是使用以下单行代码:

textView.setKeyListener(null);
Run Code Online (Sandbox Code Playgroud)

文档说这个方法:

设置要与此TextView一起使用的键侦听器.这可以为null以禁止用户输入.


Jos*_*ger 13

我认为InputFilter拒绝所有变化是一个很好的解决方案:

editText.setFilters(new InputFilter[] {
    new InputFilter() {
        public CharSequence filter(CharSequence src, int start,
            int end, Spanned dst, int dstart, int dend) {
            return src.length() < 1 ? dst.subSequence(dstart, dend) : "";
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑: dlazar建议(下面)更改returnto dst.subSequence(dstart, dend)以克服删除单词的行为.


小智 6

android:editable="false" 
android:inputType="none" 
Run Code Online (Sandbox Code Playgroud)

在你的xml或

EditText mEdit = (EditText) findViewById(R.id.yourid);
mEdit.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)

要么

EditText mEdit = (EditText) findViewById(R.id.yourid);
mEdit.setKeyListener(null);
Run Code Online (Sandbox Code Playgroud)


Bab*_*heb 5

你可以试试这个:

        mEditText.setFocusable(false);
        mEditText.setClickable(false);
        mEditText.setFocusableInTouchMode(false);
        mEditText.setLongClickable(false);
        mEditText.setInputType(InputType.TYPE_NULL);
Run Code Online (Sandbox Code Playgroud)

如果您不希望用户打开编辑文本选项,这将完全禁用EditText,禁用长按.