ImageSpan中的Selector drawable不起作用?

Jin*_*n35 5 android

是否有可能使用selectordrawable 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,你能提供任何方法来实现相同的结果吗?

MH.*_*MH. 8

这不是Android中的错误,而是使用跨度的限制.跨度意味着一些基本的文本样式,而不是(复杂的)用户交互,可能涉及或可能不涉及状态等.基本上,您应该考虑跨度内的任何内容都是静态的.选择器在a内部的所有文本上工作的事实TextView是由于TextView它本身而与底层跨度无关.

a上的选择器ImageSpan不工作的原因仅仅是因为a ImageSpan不是状态意识,并且因为没有任何东西可以通知它任何状态变化.这也许你可以认为是a的责任TextView,但另一方面,问自己以下问题:你是否真的想要TextView迭代所有不同的跨度来通知他们状态更新?

话虽如此,绝对有可能修改(可能)两者ImageSpanTextView启用对底层跨度的状态感知,但这需要做一些事情.最好的下一步是使用复合可绘制功能TextView,它允许您在一个TextView(但不是内联)内部的左侧,顶部,右侧或底部最多放置四个可绘制的.快速浏览源代码表明复合drawables是状态感知的.

完全不同的说明:我曾经回答了一个与你有关的问题.它涉及在一个内部制作一个动画GIF动画ImageSpan.它绝对不是很漂亮,但它可能会帮助你理解关于不被国家意识到的一点.此外,如果您决定继续执行您自己的问题,也许它会给您一些指示/想法.