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