Binary XML file line #3: tag requires a 'drawable' attribute or child tag defining a drawable

(轉載)http://blog.csdn.net/zhufuing/article/details/20134255html

異常日誌:

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #3: <item> tag requires a 'drawable' attribute or child tag defining a drawablejava


產生緣由:

      個人一個button按鈕的background屬性中設置成"@color/button_text_selector",按照異常來講,這個background這個屬性的值必須是drawable類型的,不能是color類型。android


drawable&color:

原本我是想給button設置一個selector,讓按鈕背景正常狀態下是一個顏色值,點擊狀態下背景又是另一個值,可是沒想到報了這樣一個錯誤,既然background只能設置爲drawable,那我就寫一個drawable的selector給button設置不一樣狀態下的顏色值,以下所示:
[html]  view plain  copy
  在CODE上查看代碼片 派生到個人代碼片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <!-- 點擊狀態下的效果 -->  
  4.     <item android:state_pressed="true">  
  5.         <shape>  
  6.             <!-- 設置背景填充色爲黑色 -->  
  7.             <solid android:color="@color/black"/>  
  8.             <!-- 設置邊框寬度爲1dp,邊框顏色爲白色 -->  
  9.             <stroke android:width="1dp" android:color="@color/white" />  
  10.             <!-- 設置按鈕圓角半徑爲5dp -->  
  11.             <corners android:radius="5dp" />  
  12.             <!-- 設置按鈕中間文字距上下左右都爲10dp的間距 -->  
  13.             <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />  
  14.         </shape>  
  15.     </item>  
  16.     <!-- 正常狀態下(非點擊)的效果 -->  
  17.     <item android:state_pressed="false">  
  18.         <shape>  
  19.             <!-- 設置背景填充色爲白色 -->  
  20.             <solid android:color="@color/white"/>  
  21.             <!-- 設置邊框寬度爲1dp,邊框顏色爲黑色 -->  
  22.             <stroke android:width="1dp" android:color="@color/black" />  
  23.             <!-- 設置按鈕圓角半徑爲5dp -->  
  24.             <corners android:radius="5dp" />  
  25.             <!-- 設置按鈕中間文字距上下左右都爲10dp的間距 -->  
  26.             <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />  
  27.         </shape>  
  28.     </item>  
  29.   
  30. </selector>  

這樣便可對不一樣狀態下的button設置顏色值了,還能夠設置其餘圓角之類的效果;固然這個只能設置按鈕背景的效果,可是文字是沒有點擊效果的,若是使用我上面縮寫的selector,那麼就會在按下按鈕的時候出現這個效果:

在按鈕被點擊的時候背景色和字體顏色混成一體,因此咱們最好同時給字體顏色設置一個selector,以下:
[html]  view plain  copy
  在CODE上查看代碼片 派生到個人代碼片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <!-- button點擊狀態下的字體顏色 -->  
  4.     <item android:state_pressed="true" android:color="@color/white"></item>  
  5.     <!-- button正常狀態下的字體顏色 -->  
  6.     <item android:state_pressed="false" android:color="@color/black"></item>  
  7. </selector>  

最後在界面layout中設置button屬性:
[html]  view plain  copy
  在CODE上查看代碼片 派生到個人代碼片
  1. <Button  
  2.         android:layout_width="wrap_content"  
  3.         android:layout_height="wrap_content"  
  4.         android:text="@string/button"  
  5.         android:background="@drawable/button_selector"  
  6.         android:textColor="@color/button_text_selector"/>  

這樣咱們的button效果就會如圖:

button正常狀態下爲白底黑字黑邊,點擊狀態下爲黑底白字白邊。

demo下載:

http://download.csdn.net/detail/zhufuing/6974387ide


//-----------------------------------------------------------------------------------------------------------------------------------------------------------------字體

因爲下面的一句話引發的:ui

radio.setBackgroundResource(R.drawable.radiobtn_selector);

<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:color="@color/title" android:state_checked="true"></item>
        <item android:color="@color/title" android:state_pressed="true"></item>
        <item android:color="@color/white"></item>
    </selector>

報出:Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #3: <item> tag requires a 'drawable' attribute or child tag defining a drawable


改爲以下:spa

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/title" />
            <stroke android:width="1dp" android:color="@color/white" />
            <corners android:radius="5dp" />
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape>
    </item>
    <item android:state_checked="true">
        <shape>
            <solid android:color="@color/title" />
            <stroke android:width="1dp" android:color="@color/white" />
            <corners android:radius="5dp" />
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <solid android:color="@color/white" />
            <stroke android:width="1dp" android:color="@color/white" />
            <corners android:radius="5dp" />
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape>
    </item>
</selector>