我正在开发一个基于测验的应用程序。将有 1 个问题和 4 个选项(单选按钮)。如果用户选择了任何错误的答案,那么我想将该单选按钮颜色变为红色。这个怎么做?
11 回答
只是来展示一些对我有帮助的东西:
每个人都在谈论如何使用 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>
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:
As @smashing pointed, this only will work on API level >= 21
要以编程方式更改 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>
//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,它将仅使用一种颜色。
希望这会有所帮助:>
这个网站非常适合自定义 Android 组件:android-holo-colors
只需选择单选按钮,将颜色设为红色,下载并在您的项目中使用!
在 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"
不要忘记为单选按钮的不同状态添加相应的图像。
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));
希望这可以帮助..
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}
对我来说它的工作。
将这两个属性添加到您在活动清单中使用的样式中
<item name="colorControlNormal">@color/grey</item> // for state released color
<item name="colorAccent">@color/blueLogo</item> //for state pressed color
对于 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()
完毕
创建一个图像!像这样并将其放在您的可绘制文件夹中..调用它,
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');
}
});
}