RadioButton 焦点背景形状

RadioButton focus background shape

我想为整个 RadioButton 添加焦点 ripple 效果,但是当我尝试将 ripple 效果与突出显示一起使用时,发生了一些奇怪的事情。图中左边是我得到的,右边是我想要的:

background_drawable:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorAccent">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white"/>
        </shape>
    </item>
</ripple>

styles.xml

<style name="RadioButtonStyle" parent="Widget.AppCompat.CompoundButton.RadioButton">
        <item name="android:background">@drawable/radio_button_background</item>
    </style>

只有当我尝试使用 ripple 效果时才会发生这种情况,如果我尝试仅使用 shape 并以 selectorstate_focused=true 作为背景时不会发生这种情况。现在我的解决方法是对 RadioButton 使用 warpper View class 并在其中设置背景。有什么方法可以像图片中那样获得背景但没有任何额外的代码?谢谢。

解决方法是将 button 属性设置为 null 并在单选按钮的样式中设置 drawableStart 属性:

<style name="RadioButtonStyle" parent="Widget.AppCompat.CompoundButton.RadioButton">
        <item name="android:button">@null</item>
        <item name="android:drawableStart">@drawable/radio_button_selector</item>
        <item name="android:drawablePadding">4dp</item>
        <item name="android:background">@drawable/radio_button_background</item>
        <item name="android:gravity">center_vertical</item>
        <item name="android:paddingStart">8dp</item>
        <item name="android:paddingEnd">8dp</item>
        <item name="android:paddingTop">11dp</item>
        <item name="android:paddingBottom">11dp</item>
    </style>

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="radioButtonStyle">@style/RadioButtonStyle</item>
        <item name="android:radioButtonStyle">@style/RadioButtonStyle</item>
    </style>

之后焦点将按方面工作,您可以根据需要向单选按钮添加背景