是否有可能使用selector
drawable ImageSpan
?
我有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" />
Run Code Online (Sandbox Code Playgroud)
选择:
<?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>
Run Code Online (Sandbox Code Playgroud)
和添加范围的代码:
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);
Run Code Online (Sandbox Code Playgroud)
当我选择此文本视图时,"某些文本"会根据需要更改其颜色,但图像不会更改.
编辑
如果有一些android bug,你能提供任何方法来实现相同的结果吗?
这不是Android中的错误,而是使用跨度的限制.跨度意味着一些基本的文本样式,而不是(复杂的)用户交互,可能涉及或可能不涉及状态等.基本上,您应该考虑跨度内的任何内容都是静态的.选择器在a内部的所有文本上工作的事实TextView
是由于TextView
它本身而与底层跨度无关.
a上的选择器ImageSpan
不工作的原因仅仅是因为a ImageSpan
不是状态意识,并且因为没有任何东西可以通知它任何状态变化.这也许你可以认为是a的责任TextView
,但另一方面,问自己以下问题:你是否真的想要TextView
迭代所有不同的跨度来通知他们状态更新?
话虽如此,绝对有可能修改(可能)两者ImageSpan
并TextView
启用对底层跨度的状态感知,但这需要做一些事情.最好的下一步是使用复合可绘制功能TextView
,它允许您在一个TextView
(但不是内联)内部的左侧,顶部,右侧或底部最多放置四个可绘制的.快速浏览源代码表明复合drawables是状态感知的.
完全不同的说明:我曾经回答了一个与你有关的问题.它涉及在一个内部制作一个动画GIF动画ImageSpan
.它绝对不是很漂亮,但它可能会帮助你理解关于不被国家意识到的一点.此外,如果您决定继续执行您自己的问题,也许它会给您一些指示/想法.
归档时间: |
|
查看次数: |
3675 次 |
最近记录: |