記事のディレクトリ
ラジオボタンとラジオボタングループの概要
選択できるボタンのグループには、ボタンが1つだけあります。ボタングループのボタンを選択すると、他のボタンの選択状態がキャンセルされます。上記の効果を実現するには、RadioButtonおよびRadioGroupと組み合わせて使用する必要があります。RadioGroupは、複数のRadioButtonを許可するコンテナであるラジオボタングループです。RadioGroupがない場合、RadioButtonは個別に選択できます。複数のRadioButtonが同じRadioGroupボタングループにある場合、RadioButtonではそのうちの1つのみを選択できます。異なるRadioGroupでは、RadioButtonは相互に影響を与えません。
RadioGroupクラスはLinearLayoutのサブクラスであり、ラジオボタングループを設定および制御するために一般的に使用されるメソッドを次の図に示します。
RadioButton関連のメソッド
方法 | 関数の説明 |
---|---|
getCheckedRadioButtonId() | 選択したボタンのIDを取得します |
clearCheck() | 選択した状態をクリアする |
check(int id) | パラメータDでオプションを選択した状態に設定します。1を渡すと、ラジオボタングループのチェック状態がクリアされます。これは、clearCheck()操作を呼び出すのと同じです。 |
setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListenerlistener) | ラジオボタングループにおいて、ラジオボタンのチェック状態が変化したときに呼び出されるコールバック関数。RadioButtonのcheckedプロパティがtrueの場合、check(id)メソッドはonCheckedChangedイベントをトリガーしません |
addView(子の表示、intインデックス、ViewGroup.LayoutParamsパラメータ) | 指定されたレイアウトパラメータを使用してサブビューを追加します。その中で、子は追加されるサブビュー、インデックスはサブビューが追加される位置、paramsは追加されるサブビューのレイアウトパラメータです。 |
getText() | ラジオボタンの値を取得するために使用されます |
OnCheckedChangeListenerリスナーを介して、ラジオボタンの状態切り替えを監視および処理できます。
コードデモ
以下は、RadioButtonとRadioGroupの使用法を示す簡単な例です。
レイアウトコードは以下の通りです
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:orientation="vertical">
<!-- 显示选择的内容 1 -->
<TextView
android:id="@+id/chooseTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我选择的是...?"
android:textSize="30sp" />
<!-- 单选按钮组 2 -->
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="按钮1"/>
<RadioButton
android:id="@+id/radioButton2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="按钮2"/>
</RadioGroup>
<!--清除所有选中的状态 3 -->
<Button
android:id="@+id/radio_clearBtn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="清除选中"/>
<!-- 往按钮组中添加新的单选按钮 4 -->
<Button
android:id="@+id/radio_addBtn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="添加子项"/>
</LinearLayout>
コードの説明は次のとおりです。ラベル1は、現在選択されているボタンのタイトルを表示するために使用されます。ラベル2は、ラジオボタングループを定義し、ボタングループに2つのラジオボタンを追加します。ラベル3は、「クリア」ボタンを定義します。ボタングループ内のすべてのラジオボタンの選択された状態をクリアするには、ラベル4は「子の追加」ボタンを定義します。これは、相互に排他的な新しいラジオボタンをボタングループに追加するために使用されます。
次に、対応するアクティビティでボタングループを使用して、ボタングループ内のすべてのボタンの選択された状態をクリアし、ボタングループに新しいラジオボタンを追加する機能を実現する方法を示します。
コードは以下のように表示されます
package com.qst.demo2;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class RadioButtonActivity extends AppCompatActivity {
private TextView chooseTxt; //显示选择的单选按钮文本 1
private RadioGroup radioGroup; //按钮组
//多个单选按钮
private RadioButton radioButton1;
private RadioButton radioButton2;
private Button radioClearBtn; //清除按钮
private Button radioAddBtn; //新增按钮
@Override //重写父类的onCreatefangfa
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //调用父类onCreate方法创建Activity
setContentView(R.layout.radiobutton_demo); //设置布局为radiobutton_demo
//初始化按钮 2
chooseTxt = (TextView) findViewById(R.id.chooseTxt);
radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
radioButton1 = (RadioButton) findViewById(R.id.radioButton1);
radioButton2 = (RadioButton) findViewById(R.id.radioButton2);
radioGroup.setOnCheckedChangeListener(onCheckedChangeListener); //设置监听器
//清除选中状态
radioClearBtn = (Button) findViewById(R.id.radio_clearBtn); //初始化
radioClearBtn.setOnClickListener(onClickListener); //设置监听器
//增加子选项
radioAddBtn = (Button) findViewById(R.id.radio_addBtn); //初始化
radioAddBtn.setOnClickListener(onClickListener); //设置监听器
}
/** 定义按钮组的监听事件 3 */
private RadioGroup.OnCheckedChangeListener onCheckedChangeListener //创建对象
= new RadioGroup.OnCheckedChangeListener() {
//使用内部类的监听器
@Override //重写方法
public void onCheckedChanged(RadioGroup group, int checkedId) {
//获取当前选中的按钮的Id
switch (radioGroup.getCheckedRadioButtonId()) {
case R.id.radioButton1:
chooseTxt.setText("我选择的是:" + radioButton1.getText());
break;
case R.id.radioButton2:
chooseTxt.setText("我选择的是:" + radioButton2.getText());
break;
default:
chooseTxt.setText("我选择的是: 新增" );
break;
}
}
};
//定义清除状态按钮和新增按钮的单击事件 4
private View.OnClickListener onClickListener = new View.OnClickListener() {
//使用外部类的监听器
@Override //重写父类方法
public void onClick(View view) {
switch (view.getId()) {
case R.id.radio_clearBtn:
radioGroup.check(-1);
chooseTxt.setText("我选择的是...?");
break;
case R.id.radio_addBtn:
//新增子选项
RadioButton newRadio = new RadioButton(RadioButtonActivity.this);
newRadio.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, RadioGroup.LayoutParams.MATCH_PARENT));
newRadio.setText("新增");
radioGroup.addView(newRadio, radioGroup.getChildCount());
break;
default:
break;
}
}
};
}
コードの説明は次のとおりです。ラベル1は、現在選択されているボタンのテキストと他の属性の定義タイプを取得するために使用されるTextViewタイプchooseTxtの属性変数を定義します。ラベル2は、ラベル1で定義された各属性変数をTheによって初期化します。属性変数の割り当てにより、後続のビジネスロジック操作が可能になります。ボタングループリスナーオブジェクトはラベル3で定義され、ボタングループで現在選択されているラジオボタンオブジェクトを取得し、chooseTxtオブジェクトにテキストを表示するために使用されます。ラベル④は、radioClearBtnおよびradioAddBtnのビジネスロジック機能を実装するために使用される共通のボタンリスナーオブジェクトを定義します。ユーザーがradioClearBtnボタンをクリックすると、ボタングループで選択されたラジオボタンの状態がクリアされます。ユーザーがradioAddBtnをクリックすると、システムは、radioGroupオブジェクトにラジオボタンオブジェクトを追加します。
AndroidMainfest.xmlマニフェストファイルでアクティビティを宣言します
運転結果