實現RadioButton由兩部分組成,也就是RadioButton和RadioGroup配合使用.RadioGroup是單選組合框,可以容納多個RadioButton的容器.在沒有RadioGroup的情況下,RadioButton可以全部都選中;當多個RadioButton被RadioGroup包含的情況下,RadioButton只可以選擇一個。並用setOnCheckedChangeListener來對單選按鈕進行監聽
1 RadioGroup相關屬性:
2 RadioGroup.getCheckedRadioButtonId ();--獲取選中按鈕的id
3 RadioGroup.clearCheck ();//---清除選中狀態
4 RadioGroup.check (int id);//---通過參入選項id來設置該選項為選中狀態如果傳遞-1作為指定的選擇標識符來清除單選按鈕組的勾選狀態,相當於調用clearCheck()操作
5 setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener listener); //--一個當該單選按鈕組中的單選按鈕勾選狀態發生改變時所要調用的回調函數
6 addView (View child, int index, ViewGroup.LayoutParams params);//---使用指定的布局參數添加一個子視圖 7 //參數 child 所要添加的子視圖 index 將要添加子視圖的位置 params 所要添加的子視圖的布局參數
8 RadioButton.getText();//獲取單選框的值 9 //此外,RadioButton的checked屬性設置為true,代碼里調用RadioButton的check(id)方法,不會觸發onCheckedChanged事件
案例:
1.定義布局文件:
1 <?xml version="1.0" encoding="utf-8"?>
2 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent" >
5 <LinearLayout
6 android:orientation="vertical"
7 android:layout_width="match_parent"
8 android:layout_height="wrap_content"
9 android:layout_marginRight="5dp" >
10 <TextView 11 android:id="@+id/radiogroup_info_id" 12 android:layout_width="228px" 13 android:layout_height="wrap_content" 14 android:text="我選擇的是...?" 15 android:textSize="30sp" 16 /> 17 <RadioGroup 18 android:id="@+id/radioGroup_sex_id" 19 android:layout_width="match_parent" 20 android:layout_height="match_parent" 21 > 22 <RadioButton 23 android:id="@+id/boy_id" 24 android:layout_width="match_parent" 25 android:layout_height="match_parent" 26 android:text="Boy" 27 /> 28 <RadioButton 29 android:id="@+id/girl_id" 30 android:layout_width="match_parent" 31 android:layout_height="match_parent" 32 android:text="Girl" 33 /> 34 </RadioGroup> 35 <Button 36 android:id="@+id/radio_clear" 37 android:layout_width="match_parent" 38 android:layout_height="match_parent" 39 android:text="清除選中按鈕" 40 /> 41 <Button 42 android:id="@+id/radio_add_child" 43 android:layout_width="match_parent" 44 android:layout_height="match_parent" 45 android:text="添加單選項" 46 /> 47 </LinearLayout> 48 </ScrollView>
2.Java代碼文件
1 package com.dream.app.start.first.radiobutton;
2 import com.dream.app.start.R; 3 import com.dream.app.start.R.id; 4 import com.dream.app.start.R.layout; 5 import com.dream.app.start.three.utils.PublicClass; 6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.view.View; 9 import android.view.View.OnClickListener; 10 import android.view.ViewGroup.LayoutParams; 11 import android.widget.Button; 12 import android.widget.RadioButton; 13 import android.widget.RadioGroup; 14 import android.widget.RadioGroup.OnCheckedChangeListener; 15 import android.widget.TextView; 16 import android.widget.ToggleButton; 17 public class RadioButtonDemo extends PublicClass { 18 private TextView textView=null; 19 private RadioGroup radioGroup=null; 20 private RadioButton radioButton_boy,radioButton_girl; 21 private Button radio_clear,child; 22 /* (non-Javadoc) 23 * <a href="http://my.oschina.net/u/244147" target="_blank" rel="nofollow">@see</a>
* android.app.Activity#onCreate(android.os.Bundle) 24 */ 25 @Override 26 protected void onCreate(Bundle savedInstanceState) { 27 // TODO Auto-generated method stub 28 super.onCreate(savedInstanceState); 29 setContentView(R.layout.layout_frist_radiobuton); 30 textView = (TextView)findViewById(R.id.radiogroup_info_id); 31 //radioGroup 32 radioGroup=(RadioGroup)findViewById(R.id.radioGroup_sex_id); 33 radioButton_boy=(RadioButton)findViewById(R.id.boy_id); 34 radioButton_girl=(RadioButton)findViewById(R.id.girl_id); 35 child=(Button)findViewById(R.id.radio_add_child); 36 //--- 37 radioGroup.setOnCheckedChangeListener(listen); 38 radio_clear=(Button)findViewById(R.id.radio_clear); 39 radio_clear.setOnClickListener(onClick); 40 child.setOnClickListener(onClick); 41 } 42 private OnCheckedChangeListener listen=new OnCheckedChangeListener() { 43 @Override 44 public void onCheckedChanged(RadioGroup group, int checkedId) { 45 int id= group.getCheckedRadioButtonId(); 46 switch (group.getCheckedRadioButtonId()) { 47 case R.id.girl_id: 48 textView.setText("我選擇的是:"+radioButton_girl.getText()); 49 break; 50 case R.id.boy_id: 51 textView.setText("我選擇的是:"+radioButton_boy.getText()); 52 break; 53 default: 54 textView.setText("我選擇的是:新增"); 55 break; 56 } 57 } 58 }; 59 private OnClickListener onClick=new OnClickListener() { 60 @Override 61 public void onClick(View v) { 62 radio_clear=(Button)v; 63 switch (radio_clear.getId()) { 64 case R.id.radio_clear: 65 radioGroup.check(-1);//清除選項 66 // radioGroup.clearCheck(); //清除選項 67 textView.setText("我選擇的是...?"); 68 break; 69 case R.id.radio_add_child: 70 //新增子 71 RadioButton newRadio =new RadioButton(getApplicationContext()); 72 newRadio.setText("新增"); 73 radioGroup.addView(newRadio, radioGroup.getChildCount()); 74 break; 75 // 76 default: 77 break; 78 } 79 } 80 }; 81 }
運行示范 如圖:
RadioButton和RadioGroup的關系:
1、RadioButton表示單個圓形單選框,而RadioGroup是可以容納多個RadioButton的容器
2、每個RadioGroup中的RadioButton同時只能有一個被選中
3、不同的RadioGroup中的RadioButton互不相干,即如果組A中有一個選中了,組B中依然可以有一個被選中
4、大部分場合下,一個RadioGroup中至少有2個RadioButton
5、大部分場合下,一個RadioGroup中的RadioButton默認會有一個被選中,並建議您將它放在RadioGroup中的起始位置
RadioButton和CheckBox的區別:
1、單個RadioButton在選中后,通過點擊無法變為未選中
單個CheckBox在選中后,通過點擊可以變為未選中
2、一組RadioButton,只能同時選中一個
一組CheckBox,能同時選中多個
3、RadioButton在大部分UI框架中默認都以圓形表示
CheckBox在大部分UI框架中默認都以矩形表示
☆定制RadioButton樣式
RadioButton長成什么樣子是由其Background、Button等屬性決定的,Android系統
使用style定義了默認的屬性,在android源碼
android/frameworks/base/core/res/res/values/styles.xml中可以看到默認的定義:
1 <style name="Widget.CompoundButton.RadioButton"> 2 <item name="android:background">@android:drawable/btn_radio_label_background</item> 3 <item name="android:button">@android:drawable/btn_radio</item> 4 </style>
即其背景圖是btn_radio_label_background,其button的樣子是btn_radio
btn_radio_label_background是什么?
其路徑是android/frameworks/base/core/res/res/drawable-mdpi/btn_radio_label_background.9.png
可以看到是一個NinePatch圖片,用來做背景,可以拉伸填充。
btn_radio是什么?
其路徑是android/frameworks/base/core/res/res/drawable/btn_radio.xml
是個xml定義的drawable,打開看其內容:
1 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 2 <item android:state_checked="true" android:state_window_focused="false" 3 android:drawable="@drawable/btn_radio_on" /> 4 <item android:state_checked="false" android:state_window_focused="false" 5 android:drawable="@drawable/btn_radio_off" /> 6 <item android:state_checked="true" android:state_pressed="true" 7 android:drawable="@drawable/btn_radio_on_pressed" /> 8 <item android:state_checked="false" android:state_pressed="true" 9 android:drawable="@drawable/btn_radio_off_pressed" /> 10 <item android:state_checked="true" android:state_focused="true"
11 android:drawable="@drawable/btn_radio_on_selected" /> 12 <item android:state_checked="false" android:state_focused="true" 13 android:drawable="@drawable/btn_radio_off_selected" /> 14 <item android:state_checked="false" android:drawable="@drawable/btn_radio_off" /> 15 <item android:state_checked="true" android:drawable="@drawable/btn_radio_on" /> 16 </selector>
自定義有三種方式:
1.方式一:
1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 <!-- 未選中->
4 <item
5 android:state_checked="false"
6 android:drawable="@drawable/tabswitcher_long" />
7 <!--選中->
8 <item 9 android:state_checked="true" 10 android:drawable="@drawable/tabswitcher_short" /> 11 </selector>
在布局文件中使用
1 <RadioGroup
2 ... 3 > 4 <RadioButton 5 ... 6 android:button="@null" 7 android:background="@drawable/radio" 8 /> 9 </RadioGroup>
android:button="@null" 去除RadioButton前面的圓點
1 @Override
2 public boolean onTouchEvent(MotionEvent event) { 3 if(event.getActionMasked() == MotionEvent.ACTION_DOWN){ 4 this.setBackgroundResource(com.wxg.tab.R.drawable.main_bg); 5 }else if(event.getActionMasked()== MotionEvent.ACTION_DOWN) { 6 this.setBackgroundResource(com.wxg.tab.R.drawable.hui); 7 } 8 return super.onTouchEvent(event); 9 }
去除RadioButton前面的圓點adioButton.setButtonDrawable(android.R.color.transparent);
3. 方式三
使用XML文件定義,在JAVA代碼中使用 radioButton.setBackgroundResource(R.drawable.radio);調用
==============================================================
設置RadioButton在文字的右邊
1 <b><RadioButton
2 android:id="@+id/button2"
3 android:layout_width="fill_parent"
4 android:layout_height="50dip"
5 android:button="@null"
6 android:drawableRight="@android:drawable/btn_radio" //在右邊
7 android:paddingLeft="30dip"
8 android:text="Android高手"
9 android:textSize="20dip" /> </b>
==============================================================