1. 程式人生 > >自定義RadioButton樣式2

自定義RadioButton樣式2

先看一下圖:


上面這種3選1的效果如何做呢?用程式碼寫?
其實有更簡單的辦法,忘了RadioButton有什麼特性了嗎?
我就用RadioButton實現瞭如上效果,其實很簡單的。
首先定義一張background,命名為radio.xml,注意該background必須為xml樣式的圖片:
Xml程式碼 複製程式碼 收藏程式碼
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <selectorxmlns:android="http://schemas.android.com/apk/res/android">
  3. <item
  4. android:state_checked
    ="false"
  5. android:drawable="@drawable/tabswitcher_long"/>
  6. <item
  7. android:state_checked="true"
  8. android:drawable="@drawable/tabswitcher_short"/>
  9. </selector>
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_checked="false" 
    android:drawable="@drawable/tabswitcher_long" /> 
    <item 
    android:state_checked="true" 
    android:drawable="@drawable/tabswitcher_short" /> 
</selector> 

這裡我們只要關心state_checked狀態就可以了。所以很簡單的配置。
接下來就是佈局檔案裡面引用這張圖片了:
Java程式碼 複製程式碼 收藏程式碼
  1. <RadioGroup   
  2.         android:gravity="center"
  3.         android:orientation="horizontal"
  4.         android:layout_width="fill_parent"
  5.         android:layout_height="wrap_content"
  6.         >   
  7.         <RadioButton      
  8.             android:id="@+id/btn_0"
  9.             android:layout_width="fill_parent"
  10.             android:layout_height="wrap_content"
  11.             android:text="最新資訊"
  12.             android:textSize="17.0sp"
  13.             android:textColor="@android:color/black"
  14.             android:gravity="center"
  15.             android:layout_weight="1"
  16.             android:checked="true"
  17.             android:button="@null"
  18.             android:background="@drawable/radio"
  19.             />     
  20.         <RadioButton      
  21.             android:id="@+id/btn_1"
  22.             android:layout_width="fill_parent"
  23.             android:layout_height="wrap_content"
  24.             android:text="線上專家"
  25.             android:textSize="17.0sp"
  26.             android:textColor="@android:color/black"
  27.             android:gravity="center"
  28.             android:layout_weight="1"
  29.             android:button="@null"
  30.             android:background="@drawable/radio"
  31.             />     
  32.         <RadioButton      
  33.             android:id="@+id/btn_2"
  34.             android:layout_width="fill_parent"
  35.             android:layout_height="wrap_content"
  36.             android:text="預約服務"
  37.             android:textSize="17.0sp"
  38.             android:textColor="@android:color/black"
  39.             android:gravity="center"
  40.             android:layout_weight="1"
  41.             android:button="@null"
  42.             android:background="@drawable/radio"
  43.             />     
  44.     </RadioGroup>  
<RadioGroup
		android:gravity="center"
		android:orientation="horizontal"  
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"
		>
		<RadioButton   
            android:id="@+id/btn_0"  
            android:layout_width="fill_parent"   
        	android:layout_height="wrap_content"
            android:text="最新資訊" 
            android:textSize="17.0sp"   
            android:textColor="@android:color/black"  
            android:gravity="center" 
            android:layout_weight="1"
            android:checked="true"
            android:button="@null"
            android:background="@drawable/radio"
            />  
        <RadioButton   
            android:id="@+id/btn_1"
            android:layout_width="fill_parent"   
        	android:layout_height="wrap_content"
            android:text="線上專家"
            android:textSize="17.0sp"
            android:textColor="@android:color/black"  
            android:gravity="center"
            android:layout_weight="1"
            android:button="@null"
          	android:background="@drawable/radio"
            />  
        <RadioButton   
            android:id="@+id/btn_2"
            android:layout_width="fill_parent"   
        	android:layout_height="wrap_content"
            android:text="預約服務"
            android:textSize="17.0sp"
            android:textColor="@android:color/black"  
            android:gravity="center"
            android:layout_weight="1"
            android:button="@null"
          	android:background="@drawable/radio"
            />  
	</RadioGroup>

注意將android:button="@null"全部設為null,並且將android:background="@drawable/radio"設為剛才新建的圖片。這樣就完成了。
一句程式碼都不用寫!

看看豎下來的效果:


傍邊有圖示的怎麼辦?


也很簡單啦,只要在每個RadioButton上加android:drawableLeft="@drawable/tubiao_0"就可以了。
另外要設定圖示與文字的距離怎麼辦?
有一個方法setCompoundDrawablePadding(pad)可以設定圖示與文字的距離,對應的屬性為android:drawablePadding。

有了這招完全可以實現類似的n選1效果,看下面:



應用:
http://www.iteye.com/topic/1116261#2256664