1. ホーム
  2. android

[解決済み] TextViewの背景色に関するセレクタ

2022-08-04 21:14:21

質問

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 として android:background="@color/selector" を使用すると、実行時に次のような例外が発生します。

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

属性を drawable に変更すると、動作しますが、ID が色参照ではなく画像参照として解釈されるため ("drawable" が示すように)、結果は完全に間違っているように見えます。

私を混乱させるのは、色参照、たとえば "@color/black" を直接 background 属性として設定できることです。これは期待どおりに動作しています。セレクタを使用すると、動作しません。

また、セレクタを textColor としても問題なく使用できます。

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

どのように解決するのですか?

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

<?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 がおそらく今までに彼の問題を解決しているとしても、これがまだ誰かの助けになることを願っています。