Android 如何使EditText不可编辑/禁用

Android 如何使EditText不可编辑/禁用,android,android-edittext,Android,Android Edittext,我有一个EditText,其中用户不能提供输入。所以我试着用 edittext.setEnabled(false); edittext.setClickable(false); 但是,当我从其他编辑文本中按下软键盘上的“下一步”按钮时,它会将我指向不应编辑的文本,并且我可以在其中插入值。如何避免这种情况?尝试添加 edittext.setFocusable(false); edittest.setFocusableInTouchMode(假)正常。我做了这样的事情,得到了结果 edit

我有一个EditText,其中用户不能提供输入。所以我试着用

edittext.setEnabled(false);
edittext.setClickable(false);
但是,当我从其他编辑文本中按下软键盘上的“下一步”按钮时,它会将我指向不应编辑的文本,并且我可以在其中插入值。如何避免这种情况?

尝试添加

edittext.setFocusable(false);

edittest.setFocusableInTouchMode(假)

正常。我做了这样的事情,得到了结果

    edittext.setEnabled(false);
    edittext.setGravity(Gravity.CENTER);
    edittext.setClickable(false);
    edittext.setFocusable(false);
    edittext.setFilters(new InputFilter[] { new textChange() });
    edittext.setInputType(0);

       class textChange implements InputFilter {
    public CharSequence filter(CharSequence source, int start, int end,
            Spanned dest, int dstart, int dend) {

        return dest.subSequence(dstart, dend);
    }
}

这很好用;只需将edittext的focusable属性设置为“false”,就完成了

<EditText
        android:id="@+id/EditTextInput"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:gravity="right"
        android:cursorVisible="true">
    </EditText>

不要把自己搞砸了。只是简单的工作使用下面一个

首先,保存EditText的密钥侦听器:

KeyListener mKeyListener = yourTextView.getKeyListener();
yourTextView.setKeyListener(null);
然后,如果要再次启用编辑,请重新分配保存的侦听器:

yourTextView.setKeyListener(mKeyListener);

无需移除焦点和设置clickable false

只需删除密钥侦听器,您就完成了

<EditText
        android:id="@+id/EditTextInput"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:gravity="right"
        android:cursorVisible="true">
    </EditText>
也在安卓6.0上测试过

看看


editText.setEnabled(false)
editText.setFocusable(false)将在EditText Xml代码中实现。

。粘贴在下面的行

android:focusable="false"
为我工作

android:focusable="false"
android:longClickable="false"

将这两个字段添加到EditText将禁用焦点,并禁用将数据复制粘贴到EditText字段。

使用imeOptions属性将软键盘中的按钮更改为“完成”

android:imeOptions=“actionDone”


将其添加到您要禁用的文本之前的EditText中。

这可能会对您有所帮助。 我发现了一个实现:

@Override
    public boolean onTouch(View v, MotionEvent event) {
        //for edit text
        return locked;
    }
其中
locked
为锁定状态


当然,我必须使用
editText.setOnTouchListener()

在哪里使用这些命令?在哪种情况下?您是否检查过您的que是否与此que类似EditText的整个要点是允许用户编辑其内容。您不使用TextView有什么原因吗?
setFocusable(false)
将自动禁用
setFocusableInTouchMode
如果您想从代码中执行此操作,这是最好的解决方案。如果禁用后我想启用它,该怎么办?@kirtan403设置您的TextView.setKeyListener(您的侦听器);如果您希望在以后启用编辑,则需要首先通过edittext.getKeyListener()存储/保存KeyListener,然后将其分配回。请注意,之后使用
setInputType
会重置密钥侦听器。这不是一个可接受的答案,因为如果我们长时间单击EditText,我们可以使用此解决方案粘贴新数据。正确的解决方案是EditTextInput.setKeyListener(null)@我同意这个答案不应该被接受。我们刚刚遇到一个问题,
isFocusable=false
仍然允许长时间点击并复制粘贴输入中本应禁用的任何内容。您的答案实际上符合预期。这很好,因为它不会改变EditText文本的颜色。虽然此代码片段可以解决问题,但确实有助于提高您的文章质量。请记住,您将在将来为读者回答这个问题,而这些人可能不知道您的代码建议的原因。我们正在寻找一个仅XML的解决方案,这似乎很好。
@Override
    public boolean onTouch(View v, MotionEvent event) {
        //for edit text
        return locked;
    }