在 Android 中,使用 RadioGroup 和 RadioButton 实现性别选择(男、女)的步骤如下:
1. 布局文件(XML)
在 XML 布局中定义 RadioGroup 和两个 RadioButton,分别表示“男”和“女”:
<RadioGroup
android:id="@+id/radioGroupGender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"> <!-- 水平排列 -->
<RadioButton
android:id="@+id/radioMale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"
android:checked="true"/> <!-- 默认选中 -->
<RadioButton
android:id="@+id/radioFemale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"/>
</RadioGroup>
2. 监听选中事件(Java/Kotlin)
在代码中监听 RadioGroup 的选中状态变化,并获取用户选择的性别:
Java 实现:
RadioGroup radioGroupGender = findViewById(R.id.radioGroupGender);
radioGroupGender.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.radioMale) {
Log.d("Gender", "选中:男");
} else if (checkedId == R.id.radioFemale) {
Log.d("Gender", "选中:女");
}
}
});
Kotlin 实现:
val radioGroupGender: RadioGroup = findViewById(R.id.radioGroupGender)
radioGroupGender.setOnCheckedChangeListener { group, checkedId ->
when (checkedId) {
R.id.radioMale -> Log.d("Gender", "选中:男")
R.id.radioFemale -> Log.d("Gender", "选中:女")
}
}
3. 获取当前选中的性别
通过 RadioGroup 的 getCheckedRadioButtonId() 方法获取选中的按钮 ID:
Java:
int checkedId = radioGroupGender.getCheckedRadioButtonId();
if (checkedId == R.id.radioMale) {
// 性别为男
} else if (checkedId == R.id.radioFemale) {
// 性别为女
}
Kotlin:
val checkedId = radioGroupGender.checkedRadioButtonId
when (checkedId) {
R.id.radioMale -> { /* 性别为男 */ }
R.id.radioFemale -> { /* 性别为女 */ }
}
4. 动态设置默认选中项
通过代码设置默认选中的性别:
radioGroupGender.check(R.id.radioMale); // 默认选中“男”
5. 自定义样式(可选)
如果默认样式不符合需求,可以通过以下方式自定义 RadioButton 的外观:
- 修改文字颜色和按钮图标:
在res/drawable中创建自定义选择器(selector)定义选中和未选中状态。 - 使用 Material Design 组件:
引入com.google.android.material.radiobutton.MaterialRadioButton替代默认控件。
关键点总结
- RadioGroup:用于管理多个互斥的
RadioButton。 - 监听选中事件:通过
OnCheckedChangeListener实时响应选择变化。 - 默认选中:在 XML 或代码中设置
android:checked="true"或check()方法。 - 获取选中值:通过
getCheckedRadioButtonId()判断用户选择。
通过上述步骤,可以快速实现一个简单的性别选择功能。
如果自定义样式呢,再看
<RadioGroup
android:id="@+id/radioGroupGender"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:orientation="horizontal"> <!-- 水平排列 -->
<RadioButton
android:id="@+id/male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/radio_button_selector"
android:textColor="@color/c_333333"
android:text="@string/male"
android:checked="true"/> <!-- 默认选中 -->
<RadioButton
android:id="@+id/female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:button="@drawable/radio_button_selector"
android:textColor="@color/c_333333"
android:text="@string/female"/>
</RadioGroup>
重点是 android:button="@drawable/radio_button_selector"
radio_button_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/radio_button_unchecked" /> <!-- 当未被选中时的背景 -->
<item android:drawable="@drawable/radio_button_checked" /> <!-- 默认背景 -->
</selector>
radio_button_unchecked和radio_button_checked分别又是
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false"
android:drawable="@mipmap/radio_normal" />
<item android:drawable="@mipmap/radio_selected" />
</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@mipmap/radio_selected" />
<item android:drawable="@mipmap/radio_normal" />
</selector>
radio_selected和radio_normal是选中和未选中的两张图片