更改单选按钮的颜色

时间:2013-09-09 10:32:41

标签: android

我正在开发一个基于测验的应用程序。将有1个问题和4个选项(单选按钮)。如果用户选择了任何错误答案,那么我想将该单选按钮颜色变为红色。怎么做?

11 个答案:

答案 0 :(得分:23)

刚刚来展示一些真正帮助我的东西:

每个人都在谈论如何使用色调以及如何使用colorAccent,但是,这不适用于API小于21的手机。

所以,对此的真正解决方法或至少对我有帮助的是使用android.support.v7.widget.AppCompatRadioButton代替RadioButton

在您的布局上使用此功能,您可以使用: app:buttonTint="@color/yourColor"

没有收到关于视图比较的警告或问题。

而且,你不要忘记添加:

xmlns:app="http://schemas.android.com/apk/res-auto"

到您的布局父级或小部件。

修改

@aselims提到buttonTint命名空间中没有app的评论。

所以...这是我目前解决这个问题的方式:

<style name="MRadioButton.Purple" parent="Widget.AppCompat.CompoundButton.RadioButton">
    <item name="colorAccent">@color/youColor</item>
    <item name="colorControlHighlight">@color/yourColor</item>
    <item name="android:colorPressedHighlight">@color/yourColor</item>
    <item name="colorPrimaryDark">@color/yourColor</item>
    <item name="colorPrimary">@color/yourColor</item>
    <item name="colorControlActivated">@color/yourColor</item>
</style>

答案 1 :(得分:17)

最快的方法是将buttonTint设置为您想要的颜色:

 <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

正如@smashing指出的那样,这只适用于API级别&gt; = 21

答案 2 :(得分:8)

以编程方式更改RadioButton按钮颜色,并在api级别上工作&lt; 21,应使用AppCompatRadioButton代替RadioButton

(否则会警告setbuttontintlist requrie api level 21

import android.support.v7.widget.AppCompatRadioButton;

AppCompatRadioButton radioButton = new AppCompatRadioButton(getActivity());
radioButton.setSupportButtonTintList(
        ContextCompat.getColorStateList(getActivity(),
        R.color.single_choice_state_list));

single_choice_state_list.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@color/single_choice_checked"></item>
    <item android:state_checked="false" android:color="@color/single_choice_unchecked"></item>
</selector>

答案 3 :(得分:4)

此网站非常适合自定义Android组件:android-holo-colors

只需选择单选按钮,使颜色变红,下载并在项目中使用它!

答案 4 :(得分:4)

为drawable / radio_button.xml文件夹下的单选按钮创建一个drawable选择器,并提及单选按钮的所有必需状态。

<?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_button_on" />
<item
 android:state_checked="false"
 android:state_window_focused="false"
 android:drawable="@drawable/radio_button_off" />
<item 
 android:state_checked="true" 
 android:state_pressed="true"
 android:drawable="@drawable/radio_button_on_pressed" />
<item
 android:state_checked="false" 
 android:state_pressed="true"
  android:drawable="@drawable/radio_button_off_pressed" />
<item
 android:state_checked="true"
  android:state_focused="true"
  android:drawable="@drawable/radio_button_on_selected" />
<item
  android:state_checked="false"
  android:state_focused="true"
  android:drawable="@drawable/radio_button_off_selected" />
<item
 android:state_checked="true"
 android:drawable="@drawable/radio_button_on" />
<item
 android:state_checked="false"
 android:drawable="@drawable/radio_button_off" />
</selector>

为你的单选按钮指定android:button =“@ drawable / radio_button”

不要忘记为单选按钮的不同状态添加相应的图像。

答案 5 :(得分:4)

//get radio button reference from layout
RadioButton raPrivate = (RadioButton) layout.findViewById(R.id.radioPrivate);
//parse textColor from string hex code
int textColor = Color.parseColor("#000000");
//set textcolor to radioButton
raPrivate.setButtonTintList(ColorStateList.valueOf(textColor));

你只能将ColorStateList对象指定为radioButton的颜色,如果你使用valueOf它只会使用一种颜色。

希望这会有所帮助:&gt;

答案 6 :(得分:2)

您可以在单选按钮上执行向后兼容的色调

XML:

<android.support.v7.widget.AppCompatRadioButton
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:id="@+id/radioButton"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:buttonTint="@color/red"/>

或者java:

CompoundButton button = (CompoundButton) findViewById(R.id.radioButton);
CompoundButtonCompat.setButtonTintList(button, ContextCompat.getColorStateList(this, R.color.red));

答案 7 :(得分:0)

创建图像!像这样并将其放在可绘制文件夹中。 叫它,

 RadioButton rb=(RadioButton) findViewById(R.id.radioButton1);
        rb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                rb.setButtonDrawable(R.drawable.'you image here');
            }
        });
    }

答案 8 :(得分:0)

希望这会有所帮助..

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
       radioButton.setButtonTintList(ContextCompat.getColorStateList(mContext, R.color.colorGris));
    }else {//Do something if you have a lower version}

对我而言。

答案 9 :(得分:0)

以您要在活动清单中使用的样式添加这两个属性

<item name="colorControlNormal">@color/grey</item> // for state released color
<item name="colorAccent">@color/blueLogo</item>  //for state pressed color 

答案 10 :(得分:0)

针对Kotlin用户

创建扩展名

fun RadioButton.setCircleColor() {
    val colorStateList = ColorStateList(
        arrayOf(
            intArrayOf(-android.R.attr.state_checked), // unchecked
            intArrayOf(android.R.attr.state_checked)  // checked
        ), intArrayOf(
           Color.RED, // unchecked color
           Color.GREEN  // checked color
        )
    )

    // finally set button tint list
    buttonTintList = colorStateList

    // optionally tint mode or tint blend
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
        buttonTintBlendMode = BlendMode.SRC_IN
    }else{
        buttonTintMode = PorterDuff.Mode.SRC_IN
    }

    invalidate() // could not be necessary
}

现在叫它

   radioButton.setCircleColor()

完成