使EditText ReadOnly

war*_*rna 111 android android-edittext

我想制作一个只读EditText视图.执行此代码的XML似乎是android:editable="false",但我想在代码中执行此操作.

我怎样才能做到这一点?

Nik*_*hil 126

请使用此代码..

Edittext.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)

  • 这不仅会'设置'只读,还会禁用滚动和复制:-( (33认同)
  • 这会禁用。特别是对于多行 EditText 来说没用。 (3认同)

小智 93

如果你setEnabled(false)然后你editText会看起来残疾(灰色等).您可能不想更改编辑器的可视方面.

一种不太干扰的方式是使用setFocusable(false).

我相信这可以更接近您的初始意图来回答您的问题.

  • 这对我很有用.我需要它可以点击,所以我不能使用setEnabled(false).为了解决粘贴问题,我刚做了android:longClickable ="false" (14认同)
  • 这很好,但用户仍然可以在文本字段中"粘贴". (7认同)
  • 如果你使用`setFocusable(false)`(甚至`setFocusableInTouchMode(false)`和`setClickable(false)`),你仍然可以改变`editText`的值,按下你的`editText`达[几百毫秒](http ://developer.android.com/reference/android/view/ViewConfiguration.html#getLongPressTimeout%28%29)并选择"粘贴"选项,除非[系统剪贴板](http://developer.android.com/guide/topics /text/copy-paste.html)为空.我用最新的API测试了它,[23](http://developer.android.com/about/versions/marshmallow/android-6.0.html). (3认同)

Sal*_*lim 28

在XML中使用

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

例:

<EditText
    android:id="@+id/EditText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:editable="false" />
Run Code Online (Sandbox Code Playgroud)

  • @MichelJung是对的.你必须使用`android:inputType ="none"` (8认同)
  • `editable`已弃用,因此不应使用. (7认同)
  • 我正在尝试android:inputType =“ none”,但数据仍可编辑。 (3认同)
  • 谷歌再次将最简单的事情远远超出了人们的想象。 (3认同)
  • 该问题寻求一种通过 Java 代码而不是 XML 使可编辑为 false 的方法! (2认同)

小智 20

这对我有用:

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

  • 这本来是好的,但用户仍然可以"粘贴"在该字段中.不管怎样竖起大拇指,即使这看起来像是黑客.我希望他们有一个setEditable()API. (5认同)

Ego*_*gor 15

最好的是通过使用TextView而不是.

  • 根据他的应用程序流程,他可能需要在某些时候使其可编辑,而在其他情况下则不需要 (8认同)

Adr*_*man 12

editText.setInputType(InputType.TYPE_NULL);
Run Code Online (Sandbox Code Playgroud)

根据文档,这可以防止显示软键盘.它还可以防止粘贴,允许滚动并且不会改变视图的视觉方面.但是,这也会阻止在视图中选择和复制文本.

从我的测试设置setInputTypeTYPE_NULL似乎在功能上等同于折旧android:editable="false".此外,android:inputType="none"似乎没有明显的效果.


Cha*_*ndo 8

android:editable =“ false”已弃用。因此,您不能使用它来使编辑文本变为只读。

我使用波纹管解决方案来完成此操作。我在这里用过

android:inputType =“ none”

android:textIsSelectable =“ true”

android:focusable =“ false”

试试看:)

<EditText
         android:id="@+id/et_newsgpa_university"
         android:layout_height="wrap_content"
         android:layout_width="match_parent"
         android:hint="@string/hint_educational_institute"
         android:textSize="@dimen/regular_text"
         android:inputType="none"
         android:textIsSelectable="true"
         android:focusable="false"
         android:maxLines="1"
         android:imeOptions="actionNext"/>
Run Code Online (Sandbox Code Playgroud)


DAr*_*rkO 7

editText.setEnabled(false);
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)

这将为您提供不可编辑的EditText过滤器.首先需要将所需的文本放在editText字段上,然后应用此过滤器.

  • 一个很好的解决方案,比TextWatcher更少的代码行.这允许用户选择和复制文本,但不能通过键入或CUT或PASTE来更改文本.return语句可以简化为`return dst.subSequence(dstart,dend);` (2认同)

Vis*_*dey 5

写这两行对你的工作来说已经足够了.

yourEditText.setKeyListener(null); 
yourEditText.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)


Jit*_*rve 5

用XML设置

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