我正在使用 AppCompatRadioButton ,我想使用我的自定义drawable,我通过下面的代码实现了这个,但它仅适用于API> = 21。
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
selector_custom_radio_buttons.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:drawable="@drawable/ic_done_single" android:state_checked="false" />
<item android:drawable="@drawable/ic_done_all" android:state_checked="true" />
</selector>
然后我通过活动主题中的样式设置单选按钮选择器
Styles.xml
<!-- Base application theme. -->
<style name="ThemeNewsFeed" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:radioButtonStyle">@style/MyRadioButtonStyle</item>
</style>
<style name="MyRadioButtonStyle">
<item name="android:button">@drawable/selector_custom_radio_buttons</item>
</style>
这是AndroidManifest.xml中的活动
<activity android:name=".social.NewsFeedActivity"
android:theme="@style/ThemeNewsFeed">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
注意:问题是我的自定义drawable在API 21及更高版本上运行良好但在API少于21时,它显示默认的单选按钮可绘制。那么我应该为低级API做些什么呢?
答案 0 :(得分:1)
只需从活动主题中删除您的AppCompatRadioButton样式,然后直接设置为AppCompatRadioButton xml代码,如下所示
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/MyRadioButtonStyle""/>
和Style.xml
<style name="MyRadioButtonStyle" parent="@android:style/Widget.CompoundButton.RadioButton">
<item name="android:button">@drawable/selector_custom_radio_buttons</item>
</style>
答案 1 :(得分:0)
接受的解决方案对我不起作用。我正在使用AndroidX和目标API17。无需创建新样式。只需替换
"android:button"
使用
"app:buttonTint"
答案 2 :(得分:0)
确实,这是一个旧线程,但也许其他在同一问题上磕磕绊绊的人可能会在以下内容中有所帮助。我给它一个机会...
我使用 API 18 运行的应用程序也遇到了同样的问题。我无法使用 android:button="@null"
和 android:background="@drawable/<selector>"
。这仅适用于 API21 以后。
我的解决方案是简单地创建一个扩展 RadioButton 类的新类,但不继承自 androidx.appcompat.widget.AppCompatRadioButton
而是简单地继承自 RadioButton
本身。 >
所以,我的“扩展”类看起来非常非常简单:
不是这个:
public class RadioButtonZed extends androidx.appcompat.widget.AppCompatRadioButton {
public RadioButtonZed(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
但是这个:
@SuppressLint("AppCompatCustomView")
public class RadioButtonZed extends RadioButton {
public RadioButtonZed(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
注意 @SuppressLint("AppCompatCustomView")
以避免 AS IDE 的抱怨。
我唯一要做的就是在我的“自己的”单选按钮类中添加一个且只有一个构造函数......
在我的 XML 文件中,我改变了这个:
<RadioButton
android:id="@+id/rb_way_too_much"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginStart="13dp"
android:layout_toEndOf="@+id/tv_level_1"
android:background="@drawable/radio"
android:button="@null"
tools:checked="true" />
为此:
<be.geertvancompernolle.mycustomradiobutton.RadioButtonZed
android:id="@+id/rb_way_too_much"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginStart="13dp"
android:layout_toEndOf="@+id/tv_level_1"
android:background="@drawable/radio"
android:button="@null"
tools:checked="true" />
这一次,@null
和 @drawable/radio
按预期工作。
最后,而不是这个(注意我的按钮图像“内部”的原始按钮图像圆圈):
还有这个:
我现在有这个:
还有这个:
正是我想要的!