38

I have some Buttons on my android app. They have an icon and text. I can set the background color of a Button in java code. If the button is clicked I want to display with a different color. So, how do I set a different color for the pressed state of the Button?

<Button 
  android:id="@+id/save" 
  android:layout_width="130dip"
  android:layout_height="wrap_content" 
  android:scaleType="center"
  android:drawableTop="@drawable/save"
  android:text="Save"
  android:textColor="#FFFFFF"
  android:textSize="14dip" 
>

The onCreate method:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.homescreen);
 save = (Button)findViewById(R.id.save);
    save.setBackgroundColor(Color.rgb(27,161,226)); }
user
  • 86,916
  • 18
  • 197
  • 190
realuser
  • 931
  • 2
  • 15
  • 26
  • http://stackoverflow.com/questions/4755871/how-to-set-image-button-backgroundimage-for-different-state/4755934#4755934 – ingsaurabh Nov 16 '11 at 06:59

6 Answers6

75

create xml file using the button image like this with mybutton.xml in drawable folder

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_pressed="true" android:drawable="@color/blue" />
   <item android:state_focused="true" android:drawable="@color/gold" />
   <item android:drawable="@color/grey" />
</selector>

and use this in button xml code

android:background="@drawable/mybutton"

add those color codes in the resource-->values-->colors.xml like this

<?xml version="1.0" encoding="utf-8"?>
<resources>   
  <color name="blue">#0066cc</color>
  <color name="gold">#e6b121</color>
  <color name="grey">#cccccc</color>
</resources>

Reference : Change button background on touch

RajaReddy PolamReddy
  • 22,428
  • 19
  • 115
  • 166
  • Thanks for your answer but I did not use an image for button. I want to set background color of the button when it pressed – realuser Nov 16 '11 at 07:42
  • Thank you very much PolamReddyRajaReddy – realuser Nov 16 '11 at 08:43
  • when I try to assgn color to drawable like android:drawable="@color/greencolor" it gives me compilation error error: Error: No resource found that matches the given name (at 'drawable' with value '@color/normalgrey'). – kgandroid Aug 28 '14 at 04:56
  • you need to add normalgray color value in values at colors.cml file – RajaReddy PolamReddy Aug 28 '14 at 05:36
  • This is the simplest way to do it I've seen, not requiring you to make separate drawables and all that. Thanks! You might add that the `` is your default button color, and really you only need `` to act as the clicked state color. The `state_focused` tag is not needed for this. But nice work! – Azurespot Dec 29 '14 at 23:15
  • How can I do it without XML file programmatically in my java class – Matt Feb 02 '19 at 10:37
6

Below is the sample code for color state list used for a button

<?xml version="1.0" encoding="UTF-8"?>

    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item
            android:color="#c0c0c0"
            android:state_selected="true"/>
        <item
            android:color="#ffffff"
            android:state_pressed="true"/>
        <item
            android:color="#9A9A9A"
            android:state_focused="false"
            android:state_pressed="false"
            android:state_selected="false"/>
</selector>

Also please check below link for color state list

http://developer.android.com/guide/topics/resources/color-list-resource.html

Maneesh
  • 6,098
  • 5
  • 36
  • 55
4

Use a StateList. Below is an example of a selector with a different drawable for the pressed state:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/drawable_for_pressed_state" android:state_pressed="true"/>
    <item android:drawable="@drawable/drawable_for_normal_state"/>

</selector>
user
  • 86,916
  • 18
  • 197
  • 190
3

You need to use a drawable with selector for pressed states, more commonly done in xml links below.

http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html

http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

caguilar187
  • 753
  • 3
  • 10
  • This doen't work, code twrows exexception `org.xmlpull.v1.XmlPullParserException: Binary XML file line #6: tag requires a 'drawable' attribute or child tag defining a drawable` – HitOdessit Oct 22 '13 at 11:02
0

edittext_modified_states.xml

<?xml version="1.0" encoding="UTF-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/apptheme_textfield_activated_holo_light" />
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/apptheme_textfield_focused_holo_light" />
    <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/apptheme_textfield_disabled_focused_holo_light"/>
    <item android:drawable="@drawable/apptheme_textfield_default_holo_light" />
</selector>

here: http://android-holo-colors.com goto this website and select your color and imort into your drawable. goto layout xml and set button background. android:background="@drawable/edittext_modified_states"

Faisal Ashraf
  • 1,456
  • 1
  • 12
  • 11
-7

If you want to change button background color then just do as follow..

@Override
    public void onClick(View v) {       
        if(v.getId() == R.id.btn01) {
                btn1.setBackgroundColor(Color.RED);
                btn1.setTextColor(Color.WHITE);

            }

just add this code in onclick event of button.

niks
  • 7
  • 2