我想在我的一个项目中更改RadioButton圆圈的颜色,但我不明白要设置哪个属性。背景颜色是黑色的,所以它变得不可见。我想将圆圈的颜色设置为白色。
22 回答
仅设置 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>
结果:
如果您想通过代码(也包括 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
}
更新:
改用这个
<android.support.v7.widget.AppCompatRadioButton android:id="@+id/rbtn_test" android:layout_width="wrap_content" android:layout_height="wrap_content" app:buttonTint="@color/primary" />
然后将此行添加到父布局或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>
- 在你的程序中,你应该这样称呼它:
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 的测试结果:
有关更多详细信息,请参阅 Android参考链接。
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/Color" />
这适用于 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
为您选择的颜色即可。
在您的styles.xml文件中声明自定义样式。
<style name="MyRadioButton" parent="Theme.AppCompat.Light"> <item name="colorControlNormal">@color/indigo</item> <item name="colorControlActivated">@color/pink</item> </style>
通过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
。
适用于 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" />
您必须使用以下代码:
<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
!
您可以使用 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>
您可以在此样式中设置所需的颜色。
设置buttonTint
属性。例如,android:buttonTint="#99FF33"
。
我做了这样的简短方法(在 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>
您必须添加颜色透明以绘制未选中状态;否则它会绘制一个纯黑色椭圆形。
对于那些想要更改禁用、检查和启用状态的人,您可以执行以下步骤:
<!-- 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>
有时您只需要像这样覆盖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用于选中。
它有一个 XML 属性:
android:buttonTint="yourcolor"
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radio"
android:buttonTint="@color/my_color"/>
所有按钮都将改变颜色,圆形框和中央检查。
RadioButton 默认采用 res/values/colors.xml 文件中 colorAccent 的颜色。因此,转到该文件并更改
<color name="colorAccent">#3F51B5</color>
到你想要的颜色。
只需使用android:buttonTint="@color/colorPrimary"
<RadioButton> 标签上的属性。
要以编程方式更改单选按钮颜色,您可以使用以下命令:
yourradio button name.buttonDrawable?.setColorFilter(Color.parseColor( color_value), PorterDuff.Mode.SRC_ATOP)
最简单的方法是更改 colourAccent
颜色,values->colours.xml
但请注意它还会更改其他内容,例如编辑文本光标颜色等。
< color name="colorAccent">#75aeff</color >
我有这个问题。如果您的应用程序具有黑色背景,并且您有很多由于背景而不可见的 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>
您可以使用以下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);
如果要为单击和未单击的单选按钮设置不同的颜色,只需使用:
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>
@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 的答案是正确的。