web-dev-qa-db-ja.com

XMLセレクターでドローアブルの色合いを変更する

背景がxmlで定義されたボタンがあります。ボタンの現在の状態(つまり、押されている、フォーカスされている、通常)に基づいてボタンに色を付けたいのですが。

以下が私のxmlファイルです。また、私の colored_tint_darkcolored_tintはどちらも、リソースフォルダーから呼び出す描画可能な画像の上に描画しようとしている半透明の色です。ここに問題があります。 UIが最初に読み込まれるとき、画像には適切な色合いがありますが、押された後、押された状態には色合いが表示されず、通常の状態には色合いが表示されません。

<?xml version="1.0" encoding="utf-8"?>
<item Android:state_pressed="true" Android:drawable="@drawable/rounded_grayscale_pinstripe_button">
    <shape>
        <gradient
            Android:endColor="@color/colored_tint"
            Android:startColor="@color/colored_tint"
            Android:angle="270" />
        <stroke
            Android:width="0dp"
            Android:color="@color/colored_tint" />
        <corners
            Android:radius="0dp" />
        <padding
            Android:left="10dp"
            Android:top="10dp"
            Android:right="10dp"
            Android:bottom="10dp" />
    </shape>
</item>

<item Android:state_focused="true" Android:drawable="@drawable/rounded_grayscale_pinstripe_button">
    <shape>
        <gradient
            Android:endColor="@color/colored_tint"
            Android:startColor="@color/colored_tint"
            Android:angle="270" />
        <stroke
            Android:width="0dp"
            Android:color="@color/colored_tint" />
        <corners
            Android:radius="0dp" />
        <padding
            Android:left="10dp"
            Android:top="10dp"
            Android:right="10dp"
            Android:bottom="10dp" />
    </shape>
</item>

<item Android:drawable="@drawable/rounded_grayscale_pinstripe_button">        
    <shape>
        <gradient
            Android:endColor="@color/colored_tint_dark"
            Android:startColor="@color/colored_tint_dark"
            Android:angle="270" />
        <stroke
            Android:width="0dp"
            Android:color="@color/colored_tint_dark" />
        <corners
            Android:radius="0dp" />
        <padding
            Android:left="10dp"
            Android:top="10dp"
            Android:right="10dp"
            Android:bottom="10dp" />
    </shape>
</item>

これにはJavaでの解決策があることは知っていますが、特にxmlでの解決策を探しています。ありがとう。

23
coder

セレクターtint_menu_item.xmlを作成します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:color="@color/white" Android:state_pressed="true" />
    <item Android:color="@color/white" Android:state_activated="true" />
    <item Android:color="@color/green" />
</selector>

(私の例では、画像は選択すると白になり、選択しないと緑になります)

次に、xmlで、ティント属性をImageViewに追加できます。

<ImageView
    Android:layout_width="30dp"
    Android:layout_height="30dp"
    Android:tint="@color/tint_menu_item"
    Android:src="@drawable/ic_menu_home" />

このセレクターは、textColor属性を使用してTextViewでも使用できます。

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:textColor="@color/tint_menu_item" />
24
Anne-Claire

selector で試しましたか?

いくつかの例を見つけることができます [〜#〜]ここ[〜#〜]

1
Alvarop