更改单选按钮的圆圈颜色

我想改变我的一个项目RadioButton的圆圈的颜色,但我不知道该设置哪个属性。背景颜色是黑色的,所以它是看不见的。我想把圆圈的颜色设置为白色。

277736 次浏览

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

设置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"/>

在你的值/ 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
}
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radio"
android:buttonTint="@color/my_color"/>

所有按钮都会改变颜色,包括圆形框和中央复选框。

更新:

  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 + 输入中以自动添加 xmlns:app="http://schemas.android.com/apk/res-auto" < / p >

最小的例子应该看起来像这样:

<?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>
    在你的程序中,你应该这样调用它: 李 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的测试结果:

This one is tests on API 19

更多细节请参见Android 参考链接

这是21年之前和21年之后的API。

在你的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"
/>

现在你所需要做的就是在你的drawable folder中创建一个radiobutton_drawable.xml。以下是你需要加入的内容:

<?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

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

@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的答案是正确的。

我把它做成了这样的简短方式(在API 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>

你必须添加颜色透明绘制未检查状态;否则它会画一个纯黑色椭圆。

RadioButton在res/values/colors.xml文件中默认采用colorAccent的颜色。 到文件中修改

的值

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

到你想要的颜色。

您可以使用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>

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

有时候你只需要像这样重写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用于已检查状态。

它有一个XML属性:

android:buttonTint="yourcolor"

你必须使用以下代码:

<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:buttonTint,用android.support.v7.widget.AppCompatRadioButton代替Radiobutton!

  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:主题属性将此样式应用到您的RadioButton。

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

但前提是你的activity扩展了AppCompatActivity

最简单的方法是在values->colours.xml
中改变colourAccent的颜色 但是要注意,它也会改变其他东西,如编辑文本光标颜色等

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

适用于api21

创建一个自定义样式的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" />

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

在单选按钮的XML内容中的android:buttonTint="@drawable/radiobutton"和你的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>

只要在<RadioButton>标签。

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

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

我有这个问题。如果你的应用程序有一个黑色背景,你有很多的radiobutton,由于背景是不可见的,编辑每个的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>


</resources>

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

yourradio button name.buttonDrawable?.setColorFilter(Color.parseColor( color_value), PorterDuff.Mode.SRC_ATOP)

你可以在XML中使用android:buttonTint属性这样做:

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

如果你有android:buttonTint,它不会工作,你必须改变它为app:buttonTint。 我必须在升级到androidx后这样做。

使用应用:buttonTint代替android: buttonTint,就像这样:

 <com.google.android.material.radiobutton.MaterialRadioButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="English"
android:checked="true"
app:buttonTint="#FF0000"
android:textAppearance="@style/TextAppearance.Material3.TitleSmall"
android:layout_marginHorizontal="16dp"
android:layoutDirection="rtl"
/>

<RadioButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="English"
android:checked="true"
app:buttonTint="#FF0000"
android:textAppearance="@style/TextAppearance.Material3.TitleSmall"
android:layout_marginHorizontal="16dp"
android:layoutDirection="rtl"
/>