- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
是否可以在 ImageSpan
中使用 selector
可绘制对象?
我有带有选择器文本颜色的 TextView
,并添加带有选择器资源的 ImageSpan。文字颜色变化效果很好,图像没有变化。这是一个错误还是有办法制作选择器跨度?
我的 TextView
:
<TextView
android:id="@+id/text"
android:ellipsize="end"
android:layout_height="fill_parent"
android:duplicateParentState="true" // parent of this text view can be selected
android:gravity="center_vertical"
android:lines="1"
android:textColor="@color/message_content_simple_text" // here is selector - it works fine
android:textSize="15dp" />
选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_active" android:state_focused="true"/>
<item android:drawable="@drawable/ic_active" android:state_selected="true"/>
<item android:drawable="@drawable/ic_active" android:state_pressed="true"/>
<item android:drawable="@drawable/ic_passive"/>
</selector>
以及添加span的代码:
SpannableString text = new SpannableString(" some text");
ImageSpan span = new ImageSpan(context, R.drawable.icon, ImageSpan.ALIGN_BASELINE);
text.setSpan(span, 0, 1, SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(text);
当我选择此 TextView 时,“某些文本”会根据需要更改其颜色,但图像不会更改。
编辑
如果有一些android bug,你能提供任何方法来达到相同的结果吗?
最佳答案
这并不是 Android 中的真正错误,而是使用 span 的更多限制。跨度适用于一些基本的文本样式,而不是用于可能涉及或不涉及状态等的(复杂)用户交互。基本上,您应该将跨度内的任何内容都视为静态的。选择器作用于 TextView
内的所有文本这一事实是 TextView
本身造成的,与底层跨度无关。
ImageSpan
上的选择器不工作的原因仅仅是因为 ImageSpan
不是状态感知的,并且因为没有任何东西通知它任何状态变化。这也许是您可以认为是 TextView
的责任,但另一方面,问问自己以下问题:您真的希望 TextView
遍历所有内容吗?通知他们状态更新的不同跨度?
也就是说,绝对有可能(可能)同时修改 ImageSpan
和 TextView
以启用对底层 span 的状态感知,但这需要一些工作。接下来最好的办法是使用 TextView
的复合可绘制对象功能,它允许您在 TextView
内的左侧、顶部、右侧或底部放置最多四个可绘制对象(但不是内联)。快速浏览源代码表明复合可绘制对象是状态感知的。
完全不同的是:我曾经 answered a question那与你有关。它涉及在 ImageSpan
中制作动画 GIF 动画。它绝对不漂亮,但它可能会帮助您理解关于不了解状态的一点。此外,如果您决定继续实现您自己的问题,也许它能给您一些指示/想法。
关于android - ImageSpan 中的可绘制选择器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269029/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!