set button background to color

来源:互联网 发布:纪念日软件iphone 编辑:程序博客网 时间:2024/05/21 03:20

Android button with different background colors

up vote10 down vote favorite
12

i want to change the background-color of a button using a selector-xml-file. My approach is basically the one from the example at the bottom this page:http://developer.android.com/guide/topics/resources/color-list-resource.html

i have a res/color/button_text.xml which looks like this:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_pressed="true"          android:color="#ffff0000"/> <!-- pressed -->    <item android:state_focused="true"          android:color="#ff0000ff"/> <!-- focused -->    <item android:color="#ff000000"/> <!-- default --></selector>

and my layout contains the following code:

<Button    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="@string/button_text"    **android:background="@color/button_text"** /> 

(** is only there to show you that i use android:background instead of android:textcolor)

this code crashes. it says "Binary XML file line #4 tag requires 'drawable' attribute or child tag defining drawable. But if I try it with android:textColor as described in the above link it works fine. So it has to be the background issue. I don't want to create a 9patch-png if it's not necessary (basically i just need a "clickable" rectangle so i use a button with a colored background)

share|improve this question
 
Konstantin's answer has a typo - the line item android:color="@color/black" .......... I propose it should read item android:drawable="@color/black" ........... – user609727Feb 9 '11 at 12:22
1 
Yes, @anticafe you are right. Danial you must have to improve your accept rate so the people can take interest in help you and it may be help to other also. – Yog Guru Apr 10 '12 at 5:33
 
stackoverflow.com/a/15880688/1352919 – FaakhirApr 8 at 13:45

4 Answers

activeoldestvotes
up vote25 down vote

As your error states, you have to define drawable attibute for the items (for some reason it is required when it comes to background definitions), so:

<?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/red"/> <!-- pressed -->    <item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused -->    <item android:drawable="@color/black"/> <!-- default --></selector>

Also note that drawable attribute doesn't accept raw color values, so you have to define the colors as resources. Createcolors.xml file at res/values folder:

<?xml version="1.0" encoding="utf-8"?><resources>     <color name="black">#000</color>     <color name="blue">#00f</color>     <color name="red">#f00</color></resources>
share|improve this answer
 
2 
item android:color="@color/black" s/b item android:drawable="@color/black" – NoahMar 13 '12 at 13:42
 
@Noah thx, fixed that. – Konstantin BurovMar 13 '12 at 19:27
 
If this solved your problem, accept this as an answer? – Sheikh AmanDec 11 '12 at 5:46
up vote10 down vote

In the URL you pointed to, the button_text.xml is being used to set the textColor attribute.That it is reason they had the button_text.xml in res/color folder and therefore they used @color/button_text.xml

But you are trying to use it for background attribute. The background attribute looks for something in res/drawable folder.

check this i got this selector custom button from the internet.I dont have the link.but i thank the poster for this.It helped me.have this in the drawable folder

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_pressed="true" >        <shape>            <gradient                android:startColor="@color/yellow1"                android:endColor="@color/yellow2"                android:angle="270" />            <stroke                android:width="3dp"                android:color="@color/grey05" />            <corners                android:radius="3dp" />            <padding                android:left="10dp"                android:top="10dp"                android:right="10dp"                android:bottom="10dp" />        </shape>    </item>    <item android:state_focused="true" >        <shape>            <gradient                android:endColor="@color/orange4"                android:startColor="@color/orange5"                android:angle="270" />            <stroke                android:width="3dp"                android:color="@color/grey05" />            <corners                android:radius="3dp" />            <padding                android:left="10dp"                android:top="10dp"                android:right="10dp"                android:bottom="10dp" />        </shape>    </item>    <item>                <shape>            <gradient                android:endColor="@color/white1"                android:startColor="@color/white2"                android:angle="270" />            <stroke                android:width="3dp"                android:color="@color/grey05" />            <corners                android:radius="3dp" />            <padding                android:left="10dp"                android:top="10dp"                android:right="10dp"                android:bottom="10dp" />        </shape>    </item></selector>

And i used in my main.xml layout like this

<Button android:id="@+id/button1"            android:layout_alignParentLeft="true"            android:layout_marginTop="150dip"            android:layout_marginLeft="45dip"            android:textSize="7pt"            android:layout_height="wrap_content"            android:layout_width="230dip"            android:text="@string/welcomebtntitle1"            android:background="@drawable/custombutton"/>

Hope this helps. Vik is correct.

EDIT : Here is the colors.xml

<?xml version="1.0" encoding="utf-8"?><resources>   <color name="yellow1">#F9E60E</color>   <color name="yellow2">#F9F89D</color>   <color name="orange4">#F7BE45</color>   <color name="orange5">#F7D896</color>   <color name="blue2">#19FCDA</color>   <color name="blue25">#D9F7F2</color>   <color name="grey05">#ACA899</color>   <color name="white1">#FFFFFF</color>   <color name="white2">#DDDDDD</color></resources>
原创粉丝点击