【发布时间】:2014-06-18 06:26:08
【问题描述】:
我有一个TextView,我希望它允许用户搜索特定的字符串。如果找到该字符串,它应该突出显示。使用背景跨度太慢且尴尬,所以我想弄清楚是否可以让它选择字符串。我知道EditText 可以使用setSelection(),但我不希望用户能够编辑文本,同时仍然能够手动突出显示文本,我似乎无法管理一个EditText。
我猜,那是非此即彼;是否可以或者以编程方式选择TextView 中的文本或可以允许文本选择而不允许在EditText 中进行编辑?
注意:我实际上使用的是扩展TextView 的自定义视图,所以我假设它是扩展EditText;我只是不确定哪个(如果有的话)会起作用。
【问题讨论】:
-
可以更改部分 TextView 字符串的颜色。只需在部件周围使用一些 HTML 来标记并在 setText 中使用 HTML.fromHTML。或者你可以使用 Spannable 对象。
-
是的,我最初就是这样做的,但是因为文本很大,所以速度很慢。
-
“使用背景跨度太慢太尴尬”——嗯……真的吗?我没有看到这个问题。使用this sample project,我可以在大约20 行代码中在20-30 毫秒内搜索出现在较长字符串中的子字符串,删除所有现有的
BackgroundColorSpans并应用新的BackgroundColorSpans。 “文本很大”——有多大? -
另外,文本选择本身将使用相同的
BackgroundColorSpan解决方案。 -
每页约 20,000 个字符。
标签: android android-edittext textview textselection