背景がxmlで定義されたボタンがあります。ボタンの現在の状態(つまり、押されている、フォーカスされている、通常)に基づいてボタンに色を付けたいのですが。
以下が私のxmlファイルです。また、私の colored_tint_dark
、colored_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での解決策を探しています。ありがとう。
セレクター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" />
selector で試しましたか?
いくつかの例を見つけることができます [〜#〜]ここ[〜#〜]