【发布时间】:2014-01-18 07:35:43
【问题描述】:
我有一个 TextView,里面有多个 ClickableSpan。当按下 ClickableSpan 时,我希望它改变其文本的颜色。
我尝试将颜色状态列表设置为 TextView 的 textColorLink 属性。这不会产生预期的结果,因为当用户在 TextView 上单击 anywhere 时,这会导致 所有跨度改变颜色。
有趣的是,使用 textColorHighlight 更改背景颜色可以按预期工作:单击 span 只会更改该 span 的背景颜色,而单击 TextView 中的其他任何地方都不会执行任何操作。
我还尝试将 ForegroundColorSpans 设置为与 ClickableSpans 相同的边界,其中我传递与上面相同的颜色状态列表作为颜色资源。这也不起作用。 span 始终保持颜色状态列表中默认状态的颜色,永远不会进入按下状态。
有人知道怎么做吗?
这是我使用的颜色状态列表:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/pressed_color"/>
<item android:color="@color/normal_color"/>
</selector>
【问题讨论】:
-
你需要在这里使用 Spannable 对象作为文本,有一个例子。 API:developer.android.com/reference/android/text/Spannable.htmlstackoverflow.com/questions/3282940/….
-
我当然是在 Spannable 上完成以上所有工作。并且链接的示例仅显示了如何设置跨度的颜色,这不是这里的问题。我希望跨度的颜色在按下时改变。
-
afaik ClickableSpan 不直接支持
-
那太可惜了。似乎是一件很简单的事情,来自 CSS。在这种情况下,我可能只会使用 textColorHighlight。
-
幸运的是我错了,更重要的是,您不仅可以更改链接颜色(updateDrawState),还可以更改背景颜色(SpanWatcher)
标签: android layout textview textcolor