194

我想在我的一个项目中更改RadioButton圆圈的颜色,但我不明白要设置哪个属性。背景颜色是黑色的,所以它变得不可见。我想将圆圈的颜色设置为白色。

4

22 回答 22

352

仅设置 buttonTint 颜色更简单(仅适用于 API 级别 21 或更高级别):

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:checked="true"
    android:buttonTint="@color/your_color"/>

在您的values/colors.xml文件中,输入您的颜色,在本例中为红色:

<color name="your_color">#e75748</color>

结果:

彩色 Android 单选按钮

如果您想通过代码(也包括 API 21 及更高版本)来执行此操作:

if(Build.VERSION.SDK_INT >= 21)
{
    ColorStateList colorStateList = new ColorStateList(
            new int[][]
            {
                new int[]{-android.R.attr.state_enabled}, // Disabled
                new int[]{android.R.attr.state_enabled}   // Enabled
            },
            new int[]
            {
                Color.BLACK, // disabled
                Color.BLUE   // enabled
            }
        );

    radio.setButtonTintList(colorStateList); // set the color tint list
    radio.invalidate(); // Could not be necessary
}
于 2015-04-09T23:50:50.810 回答
171

更新:

  1. 改用这个

    <android.support.v7.widget.AppCompatRadioButton
         android:id="@+id/rbtn_test"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         app:buttonTint="@color/primary" />
    
  2. 然后将此行添加到父布局或Android Studio中的Alt+Enter以自动添加 xmlns:app="http://schemas.android.com/apk/res-auto"

一个最小的例子应该是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

</LinearLayout>
  1. 在你的程序中,你应该这样称呼它: AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);

基本上,这种模式可以应用于所有 AppCompact 类型,例如 AppCompatCheckBox、AppCompatButton 等。

老答案:

为了支持低于 android API 21,您可以使用AppCompatRadioButton。然后用setSupportButtonTintList方法改变颜色。这是我创建单选按钮的代码片段。

    AppCompatRadioButton rb;
    rb = new AppCompatRadioButton(mContext);

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{
                    new int[]{-android.R.attr.state_checked},
                    new int[]{android.R.attr.state_checked}
            },
            new int[]{

                    Color.DKGRAY
                    , Color.rgb (242,81,112),
            }
    );
    rb.setSupportButtonTintList(colorStateList);

API 19 的测试结果:

这个是在 API 19 上测试的

有关更多详细信息,请参阅 Android参考链接

于 2015-12-29T14:56:30.870 回答
80
<android.support.v7.widget.AppCompatRadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:buttonTint="@color/Color" />
于 2016-03-04T16:24:10.147 回答
58

这适用于 API pre 21 和 post 21。

在你的styles.xml地方:

<!-- custom style -->
<style name="radionbutton"
       parent="Base.Widget.AppCompat.CompoundButton.RadioButton">
    <item name="android:button">@drawable/radiobutton_drawable</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>

XML 中的单选按钮应如下所示:

<RadioButton
    android:layout_width="wrap_content"
    style="@style/radionbutton"
    android:checked="false"
    android:layout_height="wrap_content"
    />

现在你需要做的就是radiobutton_drawable.xml在你的drawable folder. 这是您需要放入的内容:

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

您的radio_unchecked.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="oval">
  <stroke android:width="1dp" android:color="@color/colorAccent"/>
  <size android:width="30dp" android:height="30dp"/>
</shape>

您的radio_checked.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="oval">
      <stroke android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="30dp" android:height="30dp"/>
    </shape>
  </item>
  <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
    <shape android:shape="oval">
      <solid android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="10dp" android:height="10dp"/>
    </shape>
  </item>
</layer-list>

只需替换@color/colorAccent为您选择的颜色即可。

于 2016-02-23T15:11:25.190 回答
36
  1. 在您的styles.xml文件中声明自定义样式。

     <style name="MyRadioButton" parent="Theme.AppCompat.Light">
       <item name="colorControlNormal">@color/indigo</item>
       <item name="colorControlActivated">@color/pink</item>
     </style>
    
  2. 通过android:theme属性将此样式应用于您的 RadioButton 。

     <RadioButton
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:checked="true"
         android:text="Radio Button"
         android:theme="@style/MyRadioButton"/>
    

但只有当您的活动扩展时AppCompatActivity

于 2017-07-27T11:29:58.683 回答
20

适用于 API 21

创建自定义样式 RadioButton:

文件样式.xml

<style name="RadioButton" parent="Theme.AppCompat.Light">
    <item name="colorAccent">@color/green</item>
    <item name="android:textColorSecondary">@color/mediumGray</item>
    <item name="colorControlNormal">@color/red</item>
</style>

在布局中,使用主题:

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/RadioButton" />

对于 API 21 及更高版本

只需使用buttonTint

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:buttonTint="@color/green" />
于 2018-10-14T12:20:08.887 回答
19

您必须使用以下代码:

<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/black" />

使用app:buttonTint代替android:buttonTintandroid.support.v7.widget.AppCompatRadioButton代替Radiobutton

于 2017-05-04T15:57:08.020 回答
18

您可以使用 XML 中的样式更改单选按钮的未选中和选中状态的颜色。

<RadioButton
    android:id="@+id/rb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/RadioButtonStyle" />

在 style.xml

<style name="RadioButtonStyle" parent="Theme.AppCompat.Light">
        <item name="colorAccent">@android:color/white</item>
        <item name="android:textColorSecondary">@android:color/white</item>
</style>

您可以在此样式中设置所需的颜色。

于 2017-01-14T10:24:47.793 回答
11

设置buttonTint属性。例如,android:buttonTint="#99FF33"

于 2015-02-21T03:45:08.267 回答
9

我做了这样的简短方法(在 API pre 21 和 post 21 上工作):

XML 中的单选按钮应如下所示

  <RadioButton android:id="@+id/radioid"
               android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               android:button="@drawable/radiodraw" />

在文件radiodraw.xml 中

  <?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:state_checked="false" >
          <shape  android:shape="oval" >
              <stroke android:width="1dp" android:color="#000"/>
              <size android:width="30dp" android:height="30dp"/>
              <solid android:color="@android:color/transparent"/>
          </shape>
      </item>
      <item android:state_checked="true">
          <layer-list>
              <item>
                  <shape android:shape="oval">
                      <stroke android:width="1dp" android:color="#000"/>
                      <size android:width="30dp" android:height="30dp"/>
                      <solid android:color="@android:color/transparent"/>
                  </shape>
              </item>
              <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
                  <shape android:shape="oval">
                      <solid android:width="1dp" android:color="#000"/>
                      <size android:width="10dp" android:height="10dp"/>
                  </shape>
              </item>
          </layer-list>
      </item>
  </selector>

您必须添加颜色透明以绘制未选中状态;否则它会绘制一个纯黑色椭圆形。

于 2017-01-07T00:03:50.840 回答
8

对于那些想要更改禁用、检查和启用状态的人,您可以执行以下步骤:

<!-- Or androidX radio button or material design radio button -->
<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/radio_button_color" />

然后在 color res 文件夹中,创建一个名为“radio_button_color.xml”的文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/yellow900" android:state_selected="true" />
    <item android:color="@color/yellow800" android:state_checked="true" />
    <item android:color="@color/gray800" android:state_enabled="false" />
    <item android:color="@color/yellow800" android:state_enabled="true" />
</selector>
于 2019-11-28T10:46:10.073 回答
8

有时您只需要像这样覆盖colorControlNormal

<style name="RadioButtonStyle" parent="AppTheme">
    <item name="colorControlNormal">@color/pink</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:textColorSecondary">@color/black</item>
</style>

你会得到一个像这样的按钮:

在此处输入图像描述

colorControlNormal用于未选中状态,colorAccent用于选中。

于 2017-01-21T21:52:59.043 回答
6

它有一个 XML 属性:

android:buttonTint="yourcolor"
于 2017-04-28T10:55:01.960 回答
2
<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:buttonTint="@color/my_color"/>

所有按钮都将改变颜色,圆形框和中央检查。

于 2015-10-13T19:38:26.840 回答
1

RadioButton 默认采用 res/values/colors.xml 文件中 colorAccent 的颜色。因此,转到该文件并更改

<color name="colorAccent">#3F51B5</color>

到你想要的颜色。

于 2017-01-10T09:58:05.263 回答
1

只需使用android:buttonTint="@color/colorPrimary"<RadioButton> 标签上的属性。

于 2019-04-28T00:57:19.920 回答
0

要以编程方式更改单选按钮颜色,您可以使用以下命令:

yourradio button name.buttonDrawable?.setColorFilter(Color.parseColor( color_value), PorterDuff.Mode.SRC_ATOP)
于 2021-02-03T12:26:00.120 回答
0

最简单的方法是更改 colourAccent​​颜色,values->colours.xml
但请注意它还会更改其他内容,例如编辑文本光标颜色等。

< color name="colorAccent">#75aeff</color >

于 2017-08-24T08:57:04.587 回答
0

我有这个问题。如果您的应用程序具有黑色背景,并且您有很多由于背景而不可见的 RadioButtons,那么编辑android:buttonTint每个 RadioButtons 的属性会很复杂。最好的解决方案是更改您的styles.xml文件中的父主题

我变了

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

所以 RadioButtons 的圆圈变成了较浅的灰色阴影,现在即使在黑色背景下也可以看到它们。

这是我的style.xml文件:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>
于 2020-02-09T00:48:58.703 回答
0

您可以使用以下android:buttonTint属性在 XML 中执行此操作:

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:checked="false"
    android:padding="5dp"
    android:buttonTint="@color/radio_color"/>

您可以使用以下方法在 Java 中执行此操作android:buttonTint

// RadioButton ColorStateList
ColorStateList colorStateList = new ColorStateList(
    new int[][]{
        new int[]{-android.R.attr.state_checked}, // Unchecked
        new int[]{android.R.attr.state_checked} // Checked
    },

    new int[]{
        DataUtils.getColorResource(mContext, R.color.colorBlack), // Unchecked
        DataUtils.getColorResource(mContext, R.color.colorPrimary) // Checked
    }
);

RadioButton radio = findViewById(R.id.radio);   
radio.setButtonTintList(colorStateList);
于 2021-03-03T20:24:46.800 回答
0

如果要为单击和未单击的单选按钮设置不同的颜色,只需使用:

android:buttonTint="@drawable/radiobutton"在单选按钮的 XML 内容中,您的radiobutton.xml文件将是:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#1E88E5"/>
    <item android:state_checked="true" android:color="#00e676"/>
    <item android:color="#ffffff"/>
</selector>
于 2019-02-20T09:56:15.787 回答
-4

@jh314 是正确的。

在文件AndroidManifest.xml中,

<application
    android:allowBackup="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"></application>

在文件style.xml中:

<!-- Application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/red</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

项目名称必须是 colorAccent。它决定应用程序的小部件默认颜色。

但是如果您想更改代码中的颜色,也许@aknay 的答案是正确的。

于 2016-03-25T02:10:50.290 回答