如何允许用户在TextView中选择文本范围(类似于EditText)

13

我有一个TextView,我想允许用户从其中选择文本范围。 TextView占据设备的整个宽度和高度(减去一些填充和顶部的标题)。在EditText中,如果长按,您会得到一个选择叠加层,允许您设置选择左右边界。我想在TextView中实现这个功能。 我已经阅读到在API级别9(2.3)(http://developer.android.com/sdk/android-2.3.html)中有新的文本选择控件,但我很难实现它。我现在正在做如下操作:

eic = new InputConnection( bookTextView );
eic.beginBatchEdit();
但是它并没有做任何显著的事情。有人知道如何正确使用InputConnection吗?谢谢。

编辑:我不一定需要使用上述尝试的东西。我的最终目标是使用类似于TextViewTextViewEditText,并能够使用拖动光标选择文本。然后,我想使用各种上下文菜单选项(或在所选文本上方弹出的菜单)操纵所选文本。
6个回答

19

这里有一个想法...添加一个带TextView背景的EditText,以下是示例

<EditText 
android:text=" This is not an editable EditText" 
android:id="@+id/EditText01" 
android:layout_width="wrap_content" 
android:textColor = "@android:color/white"
android:editable = "false"
android:cursorVisible="false"
android:layout_height="wrap_content"
android:background = "@android:drawable/dark_header">
</EditText>

将此添加到您的XML文件中,替代TextView的位置


2
editable已被弃用,您可以使用android:inputType="none" - Calin
inputType="none" 不能防止文本被更改。 - BlueMonkMN

3

1
我知道如何使用Spans并使用高亮,但我想要的是EditText在选择文本时的“外观和感觉”(两侧带有锚点)。 - Jason Robinson

0
其实,你不必自己开发这个功能。你只需要使用EditText而不是TextView,同时将EditText的android:editable属性设置为false。我的想法和Sandy的一样。
我的代码在这里,希望能对你有所帮助:

https://dev59.com/13A85IYBdhLWcg3wEPVL#11026292


0

在长时间的互联网搜索后,我更喜欢创建自己的类

https://github.com/orionsource/SelectableTextViewer

enter image description here

目标特点:

  1. 易于使用 - 只需一个类
  2. 支持文本和Html.fromHtml
  3. 可以在ScrollView中正确触摸
  4. 光标可以重新定义
  5. 选择的颜色可以重新定义

@ Dmitry Nelepov。非常感谢。 - user4813855

0

以上所有解决方案对我来说要么太长了,要么不起作用。

你需要做的就是在你的activityfragmentadapter中添加textView.setTextIsSelectable(true)


0
你可以在 WebView 中显示文本并启用文本选择。如果你只想使用 TextView/EditText,这里有一个可能会帮助你的答案,这里是关于 Spannable 类的信息,它可能会帮助你实现你想要的效果。

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