gpt4 book ai didi

android - ImageSpan 中的可绘制选择器不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:22:31 28 4
gpt4 key购买 nike

是否可以在 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 遍历所有内容吗?通知他们状态更新的不同跨度?

也就是说,绝对有可能(可能)同时修改 ImageSpanTextView 以启用对底层 span 的状态感知,但这需要一些工作。接下来最好的办法是使用 TextView 的复合可绘制对象功能,它允许您在 TextView 内的左侧、顶部、右侧或底部放置最多四个可绘制对象(但不是内联)。快速浏览源代码表明复合可绘制对象是状态感知的。

完全不同的是:我曾经 answered a question那与你有关。它涉及在 ImageSpan 中制作动画 GIF 动画。它绝对不漂亮,但它可能会帮助您理解关于不了解状态的一点。此外,如果您决定继续实现您自己的问题,也许它能给您一些指示/想法。

关于android - ImageSpan 中的可绘制选择器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269029/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com