在Android中禁用EditText

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

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

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

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

362504 次浏览

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

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

EditText是一个薄的贴面 配置自身为的TextView 编辑。< / p >

< p > 更新: < br > 正如下面评论中提到的,editable已弃用(API等级3)。你应该使用inputType(值为none)

使用TextView代替。

使用EditText.setFocusable(false)禁用编辑

. EditText.setFocusableInTouchMode(true)启用编辑

试试这个,对我来说很管用:

public class CustomEdittext extends EditText {


Boolean mIsTextEditor=true;
public CustomEdittext(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}


@Override
public boolean onCheckIsTextEditor() {
// TODO Auto-generated method stub
return mIsTextEditor;
}




@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
mIsTextEditor=false;
Boolean mOnTouchEvent=super.onTouchEvent(event);
mIsTextEditor=true;
return mOnTouchEvent;
} }
注意:你需要添加this.getWindow().setSoftInputMode(windowmanager . layoutparam . soft_input_state_always_hidden); ,否则keyboard将在第一时间弹出

使用此选项可禁用用户输入

android:focusable="false"

android:可编辑= " false "此方法已弃用。

如果你使用android:editable="false", eclipse会提醒你这条消息“android:editable已弃用:请使用inputType”。

所以,我使用android:focusable="false"代替,它为我工作得很好。

您可以尝试以下方法:

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

启用EditText:

Enabled EditText

禁用EditText:

Disabled EditText

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

简单:

editText.setEnabled(false);

因为android:editable="false"已被撤销。你可以在EditText上使用InputType TYPE_NULL

像这样使用:

editText.setInputType(InputType.TYPE_NULL);

在我的情况下,如果没有,我需要EditText来滚动文本。当禁用maxLines时,所有的行超过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);
}
}

这对我来说很管用:

android: focusable = " false "

在类中设置以下属性:

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

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

作为android:editable="false"弃用 在xml < / p >

使用android:enabled="false"很简单。为什么要使用更多的代码?

如果你想在java class中使用,你也可以通过编程方式使用它

 editText.setEnabled(false);

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

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

...鲍勃是你的叔叔。

今天我仍然使用editable="false",但也使用focusable="false"

我认为我们需要使EditText不可编辑的情况,是因为我们想保持它的EditText样式(有下划线,有提示等),但它接受其他输入而不是文本。例如一个下拉列表。

在这种情况下,我们需要有EditText可点击(因此enabled="false"不适合)。设置focusable="false"可以实现这个功能,但是我仍然可以长时间按住EditText,从剪贴板上将我自己的文本粘贴到它上。这取决于你的代码和处理方式,甚至可能导致应用程序崩溃。

所以我也使用了editable="false",现在一切都很好,除了警告。

对于禁用编辑EditText,我认为我们可以使用focusable enable,但是

  1. 使用android:enabled=...editText.setEnabled(...)

    它还变化EditText中的文本颜色改为灰色 当点击它没有效果

  2. 使用android:focusable=...editText.setFocusable(false) - editText.setFocusableInTouchMode(true)

    它是EditText不会改变文本颜色
    当点击它时,它突出显示EditText底线约几毫秒

输出

enter image description here

你可以使用android:focusable="false",但也需要禁用游标否则 复制/粘贴功能仍然可以工作。< / p >

因此,使用

android:focusable="false"
android:cursorVisible="false"

正如一些回答提到的,如果你禁用editText,他变成灰色,如果你设置focusable false光标显示。

如果你只想用xml来做,这就可以了

       <YourFloatLabel
android:layout_width="match_parent"
android:layout_height="wrap_content">


<EditText
android:id="@+id/view_ads_search_select"
android:layout_width="match_parent"
android:layout_height="wrap_content" />


<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:clickable="true"/>
</YourFloatLabel>

我只是添加了一个FrameLayout出现在editText上面,并将其设置为可聚焦和可点击,这样editText就不能被点击了。

在你的XML代码中设置这个,它可以工作。

android: focusableInTouchMode = " false "

这将使你的编辑文本禁用

editText.setEnabled(false);

通过使用这个

editText.setInputType(InputType.TYPE_NULL);

将只是使你的Edittext 没有显示你的软键盘,但如果它连接到一个物理键盘,它将让你打字。

android:editable="false"

现在已弃用和使用

 YourEditText.setInputType(InputType.TYPE_NULL);

有多重是如何实现多重伤残的。

  • editText.setShowSoftInputOnFocus(false);editText.setFocusable

防止EditText在某些文本中显示键盘书写。但光标仍然可见,用户可以粘贴一些文本。

  • editText.setCursorVisible(false)

隐藏光标。我不知道你为什么要这么做。用户可以输入文本&粘贴。

  • editText.setKeyListener(null)

我觉得这样最方便。用户无法输入文本,但如果你想在用户触摸时触发动作,小部件仍然可以使用OnClickListener

  • editText.setEnabled(false);

完全禁用EditText。它实际上是“只读”的,用户不能在其中输入任何文本,(例如)OnClickListener 与它一起工作。

文本编辑文档

要禁用EditText的功能,只需使用:

EditText.setInputType(InputType.TYPE_NULL);

如果你想以某种方式启用它,那么你可以使用:

EditText.setInputType(InputType.TYPE_CLASS_TEXT);

禁用=焦点+点击+光标

禁用焦点、单击和光标可见性对我来说很管用。

下面是XML格式的代码

<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:clickable="false"
/>
我使用谷歌新发布的材料设计库。在我的情况下,它工作时,我使用 android: focusable = " false " android: cursorVisible = " false " < / p >
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/to_time_input_layout"
app:endIconMode="custom"
app:endIconDrawable="@drawable/ic_clock"
app:endIconContentDescription="ToTime"
app:endIconTint="@color/colorAccent"
style="@style/OutlinedEditTextStyle"
android:hint="To Time">


<com.google.android.material.textfield.TextInputEditText
android:id="@+id/to_time_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false" />


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

使用android:editable="false"被取消使用。相反,你需要使用android:focusable="false"