2010-09-17 83 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