更改单选按钮的圆圈颜色 - Android

时间:2013-06-15 04:34:34

标签: android

我想更改RadioButton的圆圈颜色,我无法理解要设置的属性。我所拥有的背景颜色是黑色,因此它变得不可见。我想将圆圈的颜色设置为白色。

22 个答案:

答案 0 :(得分:206)

更简单,只需设置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>

结果:

Colored Android Radio Button

如果你想通过代码(也是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
}

答案 1 :(得分:149)

<强>更新 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>

3。在你的程序中,应该这样调用。 AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);

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

旧答案:

为了支持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的测试结果:

This one is tested on API 19

有关详细信息,请参阅android reference link

答案 2 :(得分:72)

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

答案 3 :(得分:44)

使用API​​ pre 21以及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中的radio button应如下所示:

<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

答案 4 :(得分:14)

您必须使用此代码:

<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/black" />

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

答案 5 :(得分:10)

问题是陈旧但我认为我的答案会对人有所帮助。 您可以使用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>

您可以使用此样式设置所需的颜色。

答案 6 :(得分:9)

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

答案 7 :(得分:6)

它有一个xml属性:

android:buttonTint="yourcolor"

答案 8 :(得分:5)

我做得很简短(使用API​​ pre 21以及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>

必须添加透明颜色以绘制未选中状态;否则绘制实心黑色椭圆。

答案 9 :(得分:5)

针对API 21

创建自定义样式RadioButton style.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" />

答案 10 :(得分:4)

有时您只需要覆盖 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>

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

enter image description here

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

答案 11 :(得分:4)

  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

答案 12 :(得分:1)

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

的值

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

到你想要的颜色。

答案 13 :(得分:1)

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

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

答案 14 :(得分:1)

对于想要更改禁用,已检查和启用状态的用户,请执行以下步骤:

JSON_EXTRACT

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

<!-- 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" />

答案 15 :(得分:0)

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

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

答案 16 :(得分:0)

如果您想为单击和未单击的单选按钮设置不同的颜色,请使用:

   android:buttonTint="@drawable/radiobutton"  in xml of the radiobutton and your radiobutton.xml will be:  
<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"/>

答案 17 :(得分:0)

只需在标签上使用android:buttonTint="@color/colorPrimary"属性,希望对您有所帮助

答案 18 :(得分:0)

我遇到了这个问题。如果您的应用具有黑色背景,并且您有很多由于背景不可见的RadioButtons,那么编辑每个android:buttonTint会很复杂,最好的解决方案是在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>

答案 19 :(得分:0)

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

您的单选按钮名称.buttonDrawable?.setColorFilter(Color.parseColor(color_value), PorterDuff.Mode.SRC_ATOP)

答案 20 :(得分: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 radio = findViewById(R.id.radio);

// 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
    }
);

答案 21 :(得分:-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的回答是正确的。