Android:如何使用drawable创建自定义RadioButton?

at0kjp5o  于 2023-04-28  发布在  Android
关注(0)|答案(1)|浏览(101)

我想创建一个自定义RadioButton或RadioGroup,如下所示:image
我希望选中的单选按钮内有一个复选标记。
以下是我尝试过的:
RadioGroup xml:

<RadioGroup
            android:id="@+id/radioGroup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:layout_marginStart="16dp"
            android:layout_marginEnd="16dp"
            android:layout_marginTop="15dp">

            <RadioButton
                android:id="@+id/radioButton1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="start|center_vertical"
                android:text="Radio 1"
                android:button="@null"
                android:background="@drawable/radio_button_selector" />

            <RadioButton
                android:id="@+id/radioButton2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:text="Radio 2"
                android:button="@null"
                android:background="@drawable/radio_button_selector" />

            <RadioButton
                android:id="@+id/radioButton3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="end|center_vertical"
                android:text="Radio 3"
                android:button="@null"
                android:background="@drawable/radio_button_selector" />
        </RadioGroup>

radio_button_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <layer-list>
            <item>
                <shape android:shape="oval">
                    <solid android:color="@color/colorRadioButtonSelected"/>
                    <size android:width="20dp" android:height="20dp"/>
                </shape>
            </item>
            <item android:drawable="@drawable/checked_icon" />
        </layer-list>
    </item>
    <item android:state_checked="false">
        <shape android:shape="oval">
            <solid android:color="@color/colorRadioButtonUnselected"/>
            <size android:width="20dp" android:height="20dp"/>
        </shape>
    </item>
</selector>

结果如下:
result
我如何才能实现我想要的无线电组?

hi3rlvi2

hi3rlvi21#

试试这个:
首先,在res/drawable文件夹中为每个状态(例如选中、未选中或禁用)创建不同的形状:

<shape android:shape="oval">
    <solid android:color="@color/colorRadioButtonSelected"/>
    <size android:width="20dp" android:height="20dp"/>
</shape>

把它们和选择器分开会让你的代码更简洁。
现在,像这样创建选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/custom_radio_button_checked" android:state_checked="true" />
    <item android:drawable="@drawable/custom_radio_button_unchecked" android:state_checked="false" />
    <item android:drawable="@drawable/custom_radio_button_disabled" android:state_enabled="false" />
</selector>

请注意,我添加了一个按钮禁用时的项目,这可能很重要。但如果不是,只需删除它。
然后,在布局上像这样使用选择器:

<RadioButton
    android:id="@+id/radioButton2"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center"
    android:text="Radio 2"
    android:button="@drawable/radio_button_selector" />

相关问题