18

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

4

11 回答 11

23

只是来展示一些对我有帮助的东西:

每个人都在谈论如何使用 tint 和如何使用 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>
于 2016-02-24T18:48:03.960 回答
17

The fastest thing to do is to set the buttonTint to your desired color:

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

In your values/colors.xml put your color in this case a reddish one:

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

Result:

Colored Android Radio Button

As @smashing pointed, this only will work on API level >= 21

于 2015-04-09T23:26:17.207 回答
8

要以编程方式更改 RadioButton 按钮颜色,并在 api 级别 < 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>
于 2016-03-01T07:58:30.407 回答
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 对象指定为单选按钮的颜色,如果您使用 valueOf,它将仅使用一种颜色。

希望这会有所帮助:>

于 2015-04-21T15:38:13.520 回答
4

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

只需选择单选按钮,将颜色设为红色,下载并在您的项目中使用!

于 2013-09-09T10:37:44.837 回答
4

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

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

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

于 2013-09-09T10:47:05.287 回答
4

You can perform a backwards compatible tint on the radio button

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

Or java:

CompoundButton button = (CompoundButton) findViewById(R.id.radioButton);
CompoundButtonCompat.setButtonTintList(button, ContextCompat.getColorStateList(this, R.color.red));
于 2017-07-13T20:50:57.990 回答
1

希望这可以帮助..

    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}

对我来说它的工作。

于 2017-05-16T07:07:37.643 回答
1

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

<item name="colorControlNormal">@color/grey</item> // for state released color
<item name="colorAccent">@color/blueLogo</item>  //for state pressed color 
于 2019-01-13T09:58:38.660 回答
1

对于 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()

完毕

于 2020-11-08T09:59:00.233 回答
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');
            }
        });
    }
于 2013-09-09T11:01:31.160 回答