2010-09-17 82 views
34

我想使用selector-xml文件更改按钮的背景颜色。我的方法基本上是从例子中,一个在底部此页:http://developer.android.com/guide/topics/resources/color-list-resource.html具有不同背景颜色的Android按钮

我有一个RES /颜色/ 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:背景,而不是机器人的:文本颜色)

该代码崩溃。它说:“二进制XML文件行#4标签需要'drawable'属性或子标签定义drawable。但是如果我尝试使用android:textColor,如上面的链接中所述,它工作正常,所以它必须是背景问题。如果不需要创建9patch-png(基本上我只需要一个“可点击”的矩形,所以我使用带有彩色背景的按钮)

+0

康斯坦丁的回答有一个错字 - 行'项目的android:颜色=” @颜色/黑色“'..........我建议它应该读取项目android:drawable =”@ color/black“........... – 2011-02-09 12:22:59

+0

http:// stackoverflow。 com/a/15880688/1352919 – Faakhir 2013-04-08 13:45:43

回答

77

由于您的错误状态,您必须定义可绘制 attibute的项目(出于某种原因需要当它涉及到后台的定义),所以:

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

还要注意的是绘制 ATT ribute不接受原始颜色值,因此您必须将颜色定义为资源。在资源创建colors.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> 
+5

item android:color =“@ color/black”s/b item android: drawable =“@ color/black” – Noah 2012-03-13 13:42:56

+0

@Noah thx,修正了这个问题。 – 2012-03-13 19:27:43

+0

如果这解决了您的问题,请接受此为答案? – 2012-12-11 05:46:18

4

你必须把selector.xml文件中drwable文件夹中。然后写: android:background="@drawable/selector"。 这需要照顾按下和聚焦的状态。

27

在您指向的URL中,正在使用button_text.xml来设置textColor属性。这是他们在res/color文件夹中具有button_text.xml的原因,因此他们使用了@ color/button_text.xml

但您正在尝试将其用于背景属性。 background属性在res/drawable文件夹中查找某些内容。

检查这个我从internet.I这个选择自定义按钮没有这个link.but我感谢this.It海报有助于在绘制文件夹me.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> 
+0

你有color.xml文件去与此? – electrichead 2012-01-02 13:45:20

+0

@电动 - 是的,我有它,我在编辑我的答案。请参见。 – Sreeram 2012-01-09 06:15:32

+0

当我开始使用Android时,我第一次看到了这个答案,并被XML代码吓倒了,但两个月后我再次遇到了这个问题,这对于创建自定义按钮颜色的一般问题,而不使用图像。 – 2012-11-27 05:20:29

2
在单声道的Android可以使用过滤器这样

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

背景应该读取getbackground()。另一个选择是使用像这样的过滤器:myButton.getBackground()。setColorFilter(new LightingColorFilter(multiplier,bckgrd_color)); – hornetbzz 2012-09-09 01:31:07