制作带有中心图像的自定义单选按钮

wvi*_*ana 1 android android-layout

我正在尝试使我的自定义 RadioButton 看起来像这样:

预期结果

所以我做了自定义可绘制对象来响应 RadioButton 状态并将其用作背景。这没关系。

问题是我无法将通过android:button属性设置的图像居中。

这是我尝试在布局中使用它的方式。

<RadioGroup
        android:id="@+id/presenter_options"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="4dp"
        android:gravity="center"
        >

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:button="@drawable/cluster_centered"
            android:gravity="center"
            android:padding="8dp"
            android:background="@drawable/presenter_radiobutton_left"
            />

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="8dp"
            android:background="@drawable/presenter_radiobutton_right"
            android:button="@drawable/fire"
            />

</RadioGroup>
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到了这个结果:

实际结果

我已经尝试定义一个将重力设置为中心的可绘制对象,但没有任何改变。这是自定义drawable:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap android:src="@drawable/cluster" android:gravity="center"/>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

那么,如何将按钮图像居中?

PS:我无法将每种按钮都设置为背景,因为它将来会是动态的,因此背景中唯一可以出现的就是蓝色形状。

wvi*_*ana 5

我的解决方案是设置android:button=@null,然后将我想要的图像设置到android:drawableLeft属性中。所以我的 RadioButton 代码是这样的:

<RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="8dp"
            android:background="@drawable/presenter_radiobutton_left"
            android:button="@null"
            android:drawableLeft="@drawable/fire"
            />
Run Code Online (Sandbox Code Playgroud)