5

selectorでドローアブルを使用することは可能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" />

セレクタ:

<?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>

スパンを追加するコード:

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);

このテキストビューを選択すると、「一部のテキスト」が必要に応じて色が変わりますが、画像は変わりません。

編集

Android のバグがある場合、同じ結果を得る方法を教えていただけますか?

4

2 に答える 2

9

これは実際には Android のバグではなく、スパンの使用に関する制限です。スパンは、いくつかの基本的なテキストのスタイリングを目的としており、状態などを含む場合と含まない場合がある (複雑な) ユーザー操作にはあまり適していません。基本的に、スパン内のものはすべて静的であると見なす必要があります。セレクターが a 内のすべてのテキストで機能するという事実はTextView、それ自体によるものTextViewであり、基礎となるスパンとは何の関係もありません。

のセレクターImageSpanが機能しない理由は、単に がImageSpan状態を認識していないという事実と、状態の変化を通知するものがないためです。それはおそらく a の責任であると考えることができますが、TextViewその一方で、次の質問を自問してください:TextView状態の更新を通知するために、 a がそのすべての異なるスパンを反復処理する必要があるでしょうか?

ImageSpanそうは言っても、(おそらく) 両方を変更し、基になるスパンで状態認識を有効にすることは間違いなく可能ですが、TextViewそれには多少の作業が必要です。次の最良の方法は、 の複合ドローアブル機能を使用するTextViewことです。これにより、最大 4 つのドローアブルを a 内の左、上、右、または下にTextView(インラインではなく) 配置できます。ソース コードをざっと見てみると、複合型ドローアブルが状態認識型であることがわかります。

まったく別の話ですが、あなたの質問に関連する質問に回答したことがあります。アニメーション GIF をImageSpan. 確かにきれいではありませんが、状態を認識していないことについて少し理解するのに役立つかもしれません。また、自分の問題で実装を進めることにした場合は、おそらくいくつかの指針/アイデアを提供できるでしょう。

于 2012-07-05T00:56:09.123 に答える
0

私はテストしていませんが、動作するはずです...

実装onTouchしてTextView、ハンドルACTION_UPして、そのACTION_DOWN上で... シンプルで簡単。

于 2012-07-04T04:43:09.793 に答える