在Android中通过RadioGroup选择男、女的具体实现以及自定义RadioButton选中和未选中样式

320 阅读2分钟

在 Android 中,使用 RadioGroupRadioButton 实现性别选择(男、女)的步骤如下:


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. 获取当前选中的性别

通过 RadioGroupgetCheckedRadioButtonId() 方法获取选中的按钮 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 的外观:

  1. 修改文字颜色和按钮图标
    res/drawable 中创建自定义选择器(selector)定义选中和未选中状态。
  2. 使用 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是选中和未选中的两张图片 在这里插入图片描述