TextViewの背景色のセレクター 質問する

TextViewの背景色のセレクター 質問する

ユーザーがタッチしたときにAndroid ウィジェットの背景色を変更しようとしていますTextView。そのためにセレクターを作成しました。これは に保存されておりres/color/selector.xml、おおよそ次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:color="@color/semitransparent_white"
        />
    <item
        android:color="@color/transparent"
        />
</selector>

clickableの属性TextViewtrueもし興味があれば。

TextViewこのセレクターをasに割り当てるとandroid:background="@color/selector"、実行時に次の例外が発生します。

ERROR/AndroidRuntime(13130): 原因: org.xmlpull.v1.XmlPullParserException: バイナリ XML ファイルの行 #6: タグには、drawable 属性または drawable を定義する子タグが必要です

属性を drawable に変更すると機能しますが、ID がカラー参照ではなくイメージ参照として解釈されるように見えるため (「drawable」が示唆するように)、結果が完全に間違って見えます。

私を混乱させるのは、たとえば「@color/black」のようなカラー参照を背景属性として直接設定できることです。これは期待どおりに動作しています。セレクターを使用すると動作しません。

セレクターもtextColor問題なく使用できます。

Androidで背景色セレクターを適用する正しい方法は何ですかTextView?

ベストアンサー1

ここでの問題は、カラーセレクターを使用して背景色を定義することができないことです。描画可能セレクター。必要な変更は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:drawable="@drawable/selected_state" />
</selector>

drawableまた、そのリソースは、それ自体がカラーセレクターではないため、より適切なディレクトリに移動する必要もあります。

次に、次のようなファイルを作成する必要がありますres/drawable/selected_state.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <solid android:color="@color/semitransparent_white" />
</shape>

そして最終的には、次のように使用します。

android:background="@drawable/selector"

注記: OP がイメージ リソースを描画した理由は、おそらく、まだカラー ディレクトリにあるリソースを参照しようとしたため、@drawableID の衝突が発生し、間違ったリソースが選択されてしまったためです。

おそらく OP は既に問題を解決していると思いますが、それでもこれが誰かの役に立つことを願っています。

おすすめ記事