如何在Android Ice Cream Sandwich上使EditText可选但不可编辑?

22
在Activity中我有一个ListView,每个列表项中都有一个EditText用于显示文本。我需要通过拖动手柄来选择并复制文本,但不能编辑文本。在Android ICS上,我该怎么做?
4个回答

23

text.setTextIsSelectable(true)需要API 11及以上版本。对于使用低版本API的用户:

在xml中使用以下代码:

android:inputType="none"
android:textIsSelectable="true"

这将使您的EditText无法编辑,但仍可选择。


我可以确认,在API 10上(在2.3.4和2.3.6上测试),以上两行代码不起作用。EditText仍然可编辑,键盘弹出。 - Bruce
那么解决方案是什么? - Frozen Crayon
1
请查看我在 https://dev59.com/4mUp5IYBdhLWcg3wmIUt#20173020 上发布的完整答案。虽然我对这种笨拙的方式并不感到自豪,但现在它是我所知道的唯一方法。如果有人知道 API 版本小于 10 的更好方法,请告诉我。谢谢! - Bruce

5
我认为你可以重写onKeyDown()方法,使其什么都不做,只返回true。它应该能够捕获来自键盘的按键事件并在它们进入EditText中之前将其否定。
你也可以尝试像这样将editable设置为false: 查看此处
android:editable="false"

在XML布局中的EditText上。但是我不确定这样做是否仍然能够高亮和复制,但值得一试。


1
谢谢,Tim!但是在Android Ice Cream Sandwich上,android:editable已经被弃用了。 - Limp
他们留下了一张说明应该使用什么的便条吗? - FoamyGuy
1
是的,他们告诉我要使用TextView。但是TextView无法被选择。 - Limp

3

我解决了这个问题。
只需将TextView设置为:

text.setTextIsSelectable(true);

2

虽然android:editable已经被废弃,Lint建议使用inputType,但它似乎不起作用。因此,android:editable="false"显然是所有Android版本的最佳解决方案。

<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:editable="false"
    android:textIsSelectable="true"
    tools:ignore="Deprecated" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接