RadioButton焦点背景形状

时间:2018-11-20 16:16:35

标签: android view themes android-radiobutton android-radiogroup

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

RadioBtton example

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效果时才会发生这种情况,而当我尝试仅使用shapeselector作为背景的state_focused=true时则不会发生。现在,我的解决方法是为View使用warpper RadioButton类并为其设置背景。有没有办法获得图片中的背景,但是没有任何其他代码?谢谢。

1 个答案:

答案 0 :(得分:0)

解决方案是将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>

在此之后,焦点将按比例显示,您可以根据需要向单选按钮添加背景