Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change the tint of drawable in xml selector

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.

like image 392
coder Avatar asked Feb 27 '12 21:02

coder


People also ask

How do I change the color of a drawable in XML?

Use app:drawableTint="@color/yourColor" in the xml instade android:drawableTint="@color/yourColor" . It has the backward compatibility.

How do you change opacity in XML?

This example demonstrates how to Set opacity for View in Android . Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml.


1 Answers

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" /> 
like image 74
Anne-Claire Avatar answered Oct 10 '22 21:10

Anne-Claire