在xml选择器中更改drawable的色调

cod*_*der 20 xml android drawable

我有一个按钮,背景在xml中定义.我想根据它所处的当前状态对按钮着色 - 即 - 按下,聚焦,正常.

这是我下面的xml文件.此外,我colored_tint_dark,并且colored_tint都是半透明的颜色,我试图绘制在我从资源文件夹调用的可绘制图像.这是问题所在.当UI首次加载时,图像上具有适当的色调,但是在按下之后,按下的状态不显示任何色调,则正常状态将不显示任何色调.

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

<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>
Run Code Online (Sandbox Code Playgroud)

我知道java中有解决方案,但我特意在xml中寻找解决方案.谢谢.

Ann*_*ire 22

创建一个选择器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>
Run Code Online (Sandbox Code Playgroud)

(在我的示例中,图像在选中时为白色,未选中时为绿色)

然后在xml中,您可以向ImageView添加tint属性:

<ImageView
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:tint="@color/tint_menu_item"
    android:src="@drawable/ic_menu_home" />
Run Code Online (Sandbox Code Playgroud)

您还可以使用textColor attibute在TextView上使用此选择器:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/tint_menu_item" />
Run Code Online (Sandbox Code Playgroud)

  • android:tint 属性不适用于所有 api。要解决此问题,您可以直接创建具有正确颜色的 .png 文件,然后从 ImageView 中删除 android:tint 属性 (2认同)

小智 1

您尝试过使用选择器吗?

您可以在这里找到一些示例