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