Android開發之RadioGroup與RadioButton控制元件使用

暖楓無敵發表於2015-11-27

      RadioButton即單選按鈕,它在開發中提供了一種“多選一”的操作模式,是Android開發中常用的一種元件,例如在使用者註冊時,選擇性別時只能從“男”或者“女”中選擇一個。與Web開發不同的是,在Android中可以使用RadioGroup來定義單選按鈕元件。

     RadioGroup類的定義如下圖所示:

   java.lang.Object
     android.view.View
         android.view.ViewGroup
             android.widget.LinearLayout
                 android.widget.RadioGroup

   RadioGroup提供的只是RadioButton單選按鈕的容器,我們可以在該容器中新增多個RadioButton方可使用,要設定單選按鈕的內容,則需要使用RadioButton類。

   RadioButton類的定義如下圖所示:
  java.lang.Object
    android.view.View
        android.widget.TextView
            android.widget.Button
                android.widget.CompoundButton
                    android.widget.RadioButton
可以發現RadioButton類是Button類的子類,因此該元件與Button按鈕元件的使用類似,區別在於定義的RadioButton元件必須放在RadioGroup元件中。

-----------------------------------------------------------------------------------------------------

RadioGroup的公共方法

public void addView (View child, int index, ViewGroup.LayoutParams params)

      使用指定的佈局引數新增一個子檢視

引數

                 child         所要新增的子檢視

index         將要新增子檢視的位置

params    所要新增的子檢視的佈局引數

                           

public void check (int id) 

        如果傳遞-1作為指定的選擇識別符號來清除單選按鈕組的勾選狀態,相當於呼叫clearCheck()操作

  引數

                id     該組中所要勾選的單選按鈕的唯一識別符號(id

              參見

                getCheckedRadioButtonId()

                clearCheck()

 

public void clearCheck () 

清除當前的選擇狀態,當選擇狀態被清除,則單選按鈕組裡面的所有單選按鈕將取消勾選狀態,getCheckedRadioButtonId()將返回null

              參見

                check(int)

                getCheckedRadioButtonId()

 

public RadioGroup.LayoutParams generateLayoutParams (AttributeSet attrs)   

基於提供的屬性集合返回一個新的佈局引數集合

引數

             attrs                   用於生成佈局引數的屬性

           返回值

             返回一個ViewGroup.LayoutParams或其子類的例項

 

public int getCheckedRadioButtonId ()  

返回該單選按鈕組中所選擇的單選按鈕的標識ID,如果沒有勾選則返回-1

              返回值

                返回該單選按鈕組中所選擇的單選按鈕的標識ID

              參見

                check(int)

   clearCheck()

 

public void setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener listener)

註冊一個當該單選按鈕組中的單選按鈕勾選狀態發生改變時所要呼叫的回撥函式

引數

             listener    當單選按鈕勾選狀態發生改變時所要呼叫的回撥函式

                           

public void setOnHierarchyChangeListener (ViewGroup.OnHierarchyChangeListener listener)

註冊一個當子內容新增到該檢視或者從該檢視中移除時所要呼叫的回撥函式

引數

                            listener    當層次結構發生改變時所要呼叫的回撥函式

 

  受保護方法

protected LinearLayout.LayoutParams generateDefaultLayoutParams ()

當佈局為垂直方向時,將返回一個寬度為“填充父元素”(MATCH_PARENT),高度為“包裹內容”的佈局引數集合,如果為水平方向時,將返回寬度為“包裹內容”,高度為“填充父元素”的佈局引數集合

(match_parent即為fill_parent,public static final int FILL_PARENT/MATCH_PARENT = -1 )

        返回值

返回一個預設的佈局引數集合

 

protected void onFinishInflate ()

當檢視從XML中載入,且相應的子檢視被新增之後,呼叫該方法,

即使子類重寫了該方法,應該確保去呼叫父類的方法(通常放在方法在第一句),這樣才能完成相應的呼叫引數

       返回值

返回一個預設的佈局引數集合

 
------------------------------------------------------------------------------------------------------

   Layout佈局檔案程式碼如下:
 <RadioGroup
        android:id="@+id/rgSex"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:checkedButton="@+id/male"
        android:orientation="horizontal">
        <RadioButton
            android:id="@+id/male"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="男"/>
        <RadioButton
            android:id="@+id/female"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="女"/>
</RadioGroup>
在RadioGroup中使用
   android:orientation="horizontal"
來設定內部RadioButton的排列方式,horizontal為水平,vertical為垂直。
   android:checkedButton="@+id/male"
設定RadioGroup內預設選中的RadioButton。
   執行效果如下:

   單選按鈕RadioGroup上我們可以進行事件處理操作,當使用者選中某個選項之後將觸發相應的監聽器進行處理,該註冊事件監聽為OnCheckedChangeListener,具體方法為:
public void setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener listener)

  事件程式碼如下:

        /**RadioGroup與RadioButton**/
        sexRadioGroup = (RadioGroup)findViewById(R.id.rgSex);
        male = (RadioButton)findViewById(R.id.male);
        female = (RadioButton)findViewById(R.id.female);
        sexRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                String msg = "";
                if(male.getId()==checkedId){
                    msg = "當前選中的性別為:"+male.getText().toString();
                }
                if(female.getId()==checkedId){
                    msg = "當前選中的性別為:"+female.getText().toString();
                }
                Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_LONG).show();
            }
        });

效果如下圖所示:

===========================================================================

如果覺得對您有幫助,微信掃一掃支援一下:


相關文章