Androidbutton具有不同的背景颜色

我想用selector-xml-file来改变button的背景颜色。 我的方法基本上是从本页底部的例子: http : //developer.android.com/guide/topics/resources/color-list-resource.html

我有一个res / color / button_text.xml如下所示:

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

和我的布局包含以下代码:

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

(**只是在那里向你展示,我使用android:背景,而不是android:textcolor)

此代码崩溃。 它说:“二进制XML文件行#4标签需要'drawable'属性或子标签定义drawable。但是,如果我尝试使用android:textColor在上面的链接描述,它工作得很好,所以它必须是背景问题。如果没有必要的话,不想创build9patch-png(基本上我只需要一个“可点击的”矩形,所以我使用带有彩色背景的button)

当你的错误状态,你必须定义项目的可绘制属性(由于某些原因它是必要的,当涉及到背景定义),所以:

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

另外请注意, drawable属性不接受原始颜色值,所以您必须将颜色定义为资源。 在res / values文件夹中创buildcolors.xml文件:

 <?xml version="1.0" encoding="utf-8"?> <resources> <color name="black">#000</color> <color name="blue">#00f</color> <color name="red">#f00</color> </resources> 

在你指向的URL中,button_text.xml被用来设置textColor属性。这是因为他们在res / color文件夹中有button_text.xml,所以他们使用了@ color / button_text.xml

但是你正试图使用​​它的背景属性。 background属性在res / drawable文件夹中查找某些内容。

检查这我从这个select器自定义button从internet.I没有链接。但我感谢海报为this.It帮助我.have这在可绘制的文件夹

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

而我用我的main.xml布局是这样的

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

希望这可以帮助。 维克是正确的。

编辑:这是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> 

您必须将selector.xml文件放在drwable文件夹中。 然后写: android:background="@drawable/selector" 。 这照顾了按下和聚焦的状态。

在Mono Android中你可以使用这样的filter:

 your_button.Background.SetColorFilter(new Android.Graphics.PorterDuffColorFilter(Android.Graphics.Color.Red, Android.Graphics.PorterDuff.Mode.Multiply));