是否可以在android单选按钮组中更改单选按钮图标


95

我想让我的Android应用程序用户能够设置一些参数。单选按钮是这种情况的理想选择。但是,我不喜欢呈现单选按钮。

是否可以更改单选按钮图标?例如,是否可以为每行创建一个自定义布局,并在该布局中引用我自己的图标并更改字体等。

Answers:


167

是的,您可能必须在res / values / styles.xml中为单选按钮定义自己的样式:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme" parent="android:Theme">
   <item name="android:radioButtonStyle">@style/RadioButton</item>
</style>
<style name="RadioButton" parent="@android:style/Widget.CompoundButton.RadioButton">
   <item name="android:button">@drawable/radio</item>
</style>
</resources>

这里的“ radio”应该是有状态可绘制的radio.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:state_window_focused="false"
        android:drawable="@drawable/radio_hover" />
    <item android:state_checked="false" android:state_window_focused="false"
        android:drawable="@drawable/radio_normal" />
    <item android:state_checked="true" android:state_pressed="true"
        android:drawable="@drawable/radio_active" />
    <item android:state_checked="false" android:state_pressed="true"
        android:drawable="@drawable/radio_active" />
    <item android:state_checked="true" android:state_focused="true"
        android:drawable="@drawable/radio_hover" />
    <item android:state_checked="false" android:state_focused="true"
        android:drawable="@drawable/radio_normal_off" />
    <item android:state_checked="false" android:drawable="@drawable/radio_normal" />
    <item android:state_checked="true" android:drawable="@drawable/radio_hover" />
    </selector>

然后,将“自定义”主题应用于整个应用或您选择的活动。

有关主题和样式的更多信息,请参见http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/,这是一个很好的指南。


13
您还可以仅在单选按钮本身上设置android:button属性,而不是为其定义单独的自定义样式。
Yoni Samlan

7
没错,但这并不是一个很好的做法,因为通常只有一个单选按钮。
康斯坦丁·布罗夫

@KonstantinBurov如果我使用的是9补丁图像怎么办?
哈德斯

@KonstantinBurov除非您以编程方式添加Buttons,否则就太好了:)
Cornholio 2013年

1
对于支持主题,可能要使用<style name =“ CustomTheme” parent =“ android:Theme”> <item name =“ android:radioButtonStyle”> @ style / RadioButton </ item> <item name =“ radioButtonStyle”> @ style / RadioButton </ item> </ style>
Dhruv Mevada 2015年

30

您可以像在普通按钮一样将自定义图像放在单选按钮中。为此,在可绘制文件夹中创建一个XML文件,例如

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/sub_screens_aus_hl" 
    android:state_pressed="true"/>  
<item android:drawable="@drawable/sub_screens_aus" 
    android:state_checked="true"/>  
<item android:drawable="@drawable/sub_screens_aus" 
    android:state_focused="true" />
<item android:drawable="@drawable/sub_screens_aus_dis" />  
</selector> 

在这里您可以为单选按钮使用3个不同的图像

并将此文件用于RadioButton,例如:

android:button="@drawable/aus"
android:layout_height="120dp"
android:layout_width="wrap_content" 

13

仅更改单选按钮的更简单方法是将选择器设置为可绘制的右侧

<RadioButton
    ...
    android:button="@null"
    android:checked="false"
    android:drawableRight="@drawable/radio_button_selector" />

选择器是:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_checkbox_checked" android:state_checked="true" />
    <item android:drawable="@drawable/ic_checkbox_unchecked" android:state_checked="false" /></selector>

就这样


1
最好的解决方案,对于我来说,我也将'drawableRight'更改为'button',并向选择器xml添加了一些填充
F-1

这是最好的解决方案。我曾经以这种方式使用过,并且工作正常。但是,在迁移到andoidx android:button =“ @ null”之后,它不起作用了,我们看到每个项目都有两个单选按钮图标!。
maniaq

1

是的...来自Xml

android:button="@drawable/yourdrawable" 

和从Java

myRadioButton.setButtonDrawable(resourceId or Drawable);

`


0

这可能是一种快速的方法,

在此处输入图片说明

上面显示了两个图标,您将看到RadioGroup类似以下的内容

在此处输入图片说明

  • RadioGroup的方向更改为水平
  • 对于每个RadioButton属性,请尝试Button 在下提供图标CompoundButton
  • 调整填充和大小,
  • 并在选中时设置Background属性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.