Categories
discuss

How to set custom button state background color?

I have a button which contains a drawable and text. I want the background of the button to be different than the normal one provided (preferably a plain color). This works fine, I simply use the …

I have a button which contains a drawable and text. I want the background of the button to be different than the normal one provided (preferably a plain color). This works fine, I simply use the android:background attribute in the XML file and assign the color accordingly. However, I want the the background to change to a different color when selected or focused (state selector).

I attempted to create a selector in a drawable folder with the defined colors (which works well when working with the text of a button), like so:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_focused="true" android:state_pressed="false" android:color="@color/green" />
        <item android:state_focused="true" android:state_pressed="true" android:color="@color/green" />
        <item android:state_focused="false" android:state_pressed="true" android:color="@color/green" />
        <item android:color="@color/white" />
    </selector> 

and set this xml as the android:background attribute, like so:

android:background="@drawable/button_state"

but this causes a force close stating:

 Caused by: android.content.res.Resources$NotFoundException: File res/drawable/button_state.xml from drawable resource ID #0x7f020070

but the resource is there. Can you not customize the background state? If you can, how? or what am I doing wrong? Thanks for the help!

Answer

The xml you posted is suitable for a color state list, not a state list drawable. Try this instead:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" >
        <shape><solid android:color="@color/green"/></shape>
    </item>
    . . .
</selector>

Alternatively, put your existing file into res/color and use it as you would any other color. However, I don’t remember if you can use a color state list directly as a background for a view.

Source: stackoverflow
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. By using this site, you agree to the Privacy Policy, and Copyright Policy. Content is available under CC BY-SA 3.0 unless otherwise noted. The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 © No Copyrights, All Questions are retrived from public domain..