EditText 不可编辑

我试图用这段代码使 EditText 不可编辑:

<EditText android:id="@+id/outputResult"
android:inputType="text"
android:editable="false"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/result" />

我必须添加以下行,使其不可编辑

android:focusable="false"

我做错什么了吗?

191805 次浏览

android:editable="false"应该可以工作,但是 这是不被推崇的,你应该使用 android:inputType="none"代替。

或者,如果您希望在代码中执行此操作,可以这样做:

EditText mEdit = (EditText) findViewById(R.id.yourid);
mEdit.setEnabled(false);

这也是一个可行的替代方案:

EditText mEdit = (EditText) findViewById(R.id.yourid);
mEdit.setKeyListener(null);

如果您要使您的 EditText不可编辑,我建议您使用 TextView小部件而不是 EditText,因为在这种情况下使用 EditText 似乎是毫无意义的。

编辑: 修改了一些信息,因为我发现 android:editable已经被废弃了,你应该使用 android:inputType="none",但是在 android 代码中有一个关于它的 bug; 所以请检查 这个

 <EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editTexteventdate"
android:background="@null"
android:hint="Date of Event"
android:textSize="18dp"
android:textColor="#fff"
android:editable="false"
android:focusable="false"
android:clickable="false"


/>

加上这个

可编辑 = “ false”

机器人: 可聚焦 = “ false”

Android: clickable = “ false”

对我来说很有用

如果您想让 EditText 不能从代码编辑:

void disableInput(EditText editText){
editText.setInputType(InputType.TYPE_NULL);
editText.setTextIsSelectable(false);
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v,int keyCode,KeyEvent event) {
return true;  // Blocks input from hardware keyboards.
}
});
}

如果您想删除 EditText 的水平线,只需添加:

editText.setBackground(null);

如果想让用户复制 EditText 的内容,请使用:

editText.setTextIsSelectable(true);

我想我是迟到了,但是我们一起用下面的方法来解决这个问题:

 android:inputType="none"
android:enabled="false"

在 youexml 编辑文本中添加以下行。

android:editable="false"
android:focusable="false"
android:clickable="false"

对我有用

我也有这个问题。

我是这么做的:

<EditText
android:layout_width="30dp"
android:layout_height="wrap_content"
android:id="@+id/yourid"
android:editable="false"
android:inputType="none" />

使用方法:

EditText edtText = (EditText) findViewById(R.id.yourEditTextId);
edtText.setEnabled(false);

您也可以在 xml 文件中使用 android:enabled属性。

如果你真的想使用 edit Text 而不是 textView,那么可以考虑使用以下三种:

android:focusable="false"


android:clickable="false"


android:longClickable="false"

编辑: “ longClickable”属性禁用长按动作,导致“粘贴”和“选择所有”选项显示为工具提示。

我的要求是有一个编辑文本的外观和感觉,并打开一个弹出窗口的点击,但使启用为假将不允许点击侦听器对它。所以我就这样做了。

 <EditText
android:id="@+id/tvCustomerAge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="80dp"
android:layout_alignParentEnd="true"
android:drawableRight="@drawable/arrow_down"
android:inputType="none"
android:focusable="false"
android:clickable="true"
tools:text="24"/>
android:enabled = false

将该行包含在您的布局 xml 文件中。

如果希望禁用的 EditText 看起来与启用的 EditText 相同,则应将 android:enabled="false"android:textColor="..."结合使用。

这里有一个例子:

<com.google.android.material.textfield.TextInputLayout
...>


<com.google.android.material.textfield.TextInputEditText
...
android:text="..."
android:enabled="false"
android:textColor="@color/dark_grey"/>


</com.google.android.material.textfield.TextInputLayout>

对于 平板电脑版本中使用的 EditText,我无法去掉 软键盘,下面的代码片段做得非常好。

eText.setEnabled(false);
eText.setFocusable(false);
eText.setActivated(false);
eText.setInputType(InputType.TYPE_NULL);

在编辑文本中设置此属性。

<EditText
android:editable="false"
/>
android:inputType="none"
android:enabled="false"
android:clickable="false"

可点击的属性是 可以选择! 你仍然可以 设置文本到编辑文本 程序化

如果不需要,尝试删除 inputType 属性。

如果您希望编辑文本可点击但不可编辑,您可以尝试这样做:

android:cursorVisible="false"
android:inputType="none"
android:clickable="true"
android:focusable="false"

你可能需要在 Andorid 电视台进行编辑文字行为如果你需要编辑不可编辑但可点击的文字,以下方法可帮助你达到这个目的-

/**
* Disable edit text input skill
*/
fun EditText.disableInput() {
showSoftInputOnFocus = false
keyListener = null // Make non editable
// Hide keyboard when disabled edittext gets focus
setOnFocusChangeListener { _, hasFocus ->
if (hasFocus) hideKeyboard()
}
}


fun View.hideKeyboard() {
val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

之后,您可以使用传统的 onClick侦听器获得 click 事件

好的,android:editable="false"已经过时了,不再起作用了,而且 android:inputType="none"也不会给你你想要的结果

你可以利用

<EditText
android:cursorVisible="false"
android:focusableInTouchMode="false"
android:maxLength="10"/>

如果你想让 EditText 再次可编辑,你可以用代码来实现

//enable view's focus event on touch mode
edittext.setFocusableInTouchMode(true);


//enable cursor is visible
edittext.setCursorVisible(true);


// You have to focus on the edit text to avoid having to click it twice
//request focus
edittext.requestFocus();


//show keypad is used to allow the user input text on the first click
InputMethodManager openKeyboard = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);


openKeyboard.showSoftInput(edittext, InputMethodManager.SHOW_IMPLICIT);

注意,我使用的是 android:focusableInTouchMode="false",而不是

android:focusable="false"

因为当我吸毒的时候

edittext.setFocusable(true);

我还要补充一下

edittext.setFocusableInTouchMode(true);

像这样

edittext.setFocusableInTouchMode(true);
edittext.setFocusable(true);

以便再次启用编辑文本焦点