ユーザーがタッチしたときに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
の属性TextView
はtrue
もし興味があれば。
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 がイメージ リソースを描画した理由は、おそらく、まだカラー ディレクトリにあるリソースを参照しようとしたため、@drawable
ID の衝突が発生し、間違ったリソースが選択されてしまったためです。
おそらく OP は既に問題を解決していると思いますが、それでもこれが誰かの役に立つことを願っています。