Change the tint of drawable in xml selector

29,631

Solution 1

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" />

Solution 2

Have you tried with a selector?

You can find some examples HERE

Share:
29,631

Related videos on Youtube

coder
Author by

coder

Mobile App developer.

Updated on August 04, 2022

Comments

  • coder
    coder almost 2 years

    I have a button with the background defined in xml. I would like to tint the button based on the current state it is in - ie - pressed, focussed, normal.

    Here is my xml file below. Also, my colored_tint_dark, and colored_tint are both translucent colors that I am trying to draw over the drawable image that I call from the resources folder. Here is the problem. When the UI first loads, the image has the appropriate tint on it, but after pressed, the pressed state doesn't show any tint, then the normal state won't show any tint.

    <?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>
    

    I know that there are solutions to this in java, but I am specifically looking for a solution in xml. Thanks.

  • Alex
    Alex almost 8 years
    HI, I have issue with tint selector on Api 18 and lower link Do you have suggestions what the problem can be?
  • Anne-Claire
    Anne-Claire almost 8 years
    android:tint attribute does not work on all apis. To resolve this you can create you .png file with the right color directly and then remove the android:tint attribute from your ImageView
  • rraallvv
    rraallvv over 7 years
    Where do I put tint_menu_item.xml?
  • Anne-Claire
    Anne-Claire over 7 years
    Create a new folder "color" inside "res" (next to 'values' folder, 'drawable' folder, etc). Then put your tint_menu_item.xml inside it.