我有一个按钮,背景在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中寻找解决方案。感谢。
答案 0 :(得分:22)
Create a selector 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>
(In my example, image is white when selected, and green when not selected)
Then in your xml, you can add tint attribute to ImageView:
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:tint="@color/tint_menu_item"
android:src="@drawable/ic_menu_home" />
You can also use this selector on a TextView using textColor attibute:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/tint_menu_item" />
答案 1 :(得分:1)
答案 2 :(得分:0)
假设您有一个appCpmpatImageView
并将此**app**:tint="@drawable/custom_tint"
添加到compat图像视图中,并且您的自定义色调选择器如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/grey" android:state_pressed="true" />
<item android:color="@color/silver" android:state_focused="true" />
<!-- default tint -->
<item android:color="@color/white" />
</selector>
,因此您的appCompat ImageView将在不同情况下将每种颜色用作色彩。