Android:以编程方式更改 RadioButtons 和复选框的颜色
Posted
技术标签:
【中文标题】Android:以编程方式更改 RadioButtons 和复选框的颜色【英文标题】:Android: Change the color of RadioButtons and checkboxes programmatically 【发布时间】:2015-12-05 00:29:27 【问题描述】:我以编程方式在LinearLayout
中创建了RadioButton
和CheckBox
。但是,现在我想更改单选按钮的颜色和复选框的颜色。我用
RadioButton.setHighlightColor(Color.parseColor("#0c83bd"));
checkbox.setHighlightColor(Color.parseColor("#0c83bd"));
但它没有用。
【问题讨论】:
使用背景图片 但我想设置颜色不附加图片 android 支持库中是否有可用的功能? 【参考方案1】:使用 AppCompatCheckBox 和 AppCompatRadioButton 代替 CheckBox 和 RadioButton。 您的 xml 将具有:
<android.support.v7.widget.AppCompatCheckBox
android:id="@+id/cbSelected"
android:layout_
android:layout_
android:backgroundTint="@color/colorAccent" //This to set your default button color
android:checked="true"/>
<android.support.v7.widget.AppCompatRadioButton
android:id="@+id/rb"
app:buttonTint="@color/colorAccent" //This to set your default button color
android:layout_
android:layout_/>
现在是 java 代码: 创建 ColorStateList
ColorStateList colorStateList = new ColorStateList(
new int[][]
new int[]android.R.attr.state_enabled //enabled
,
new int[] getResources().getColor(R.color.colorPrimary)
);
要以编程方式更改 AppCompatRadioButton 或 AppCompatCheckBox 的颜色,请调用 setSupportButtonTintList。
AppCompatRadioButton radioButton = (AppCompatRadioButton) findViewById(R.id.rb);
radioButton.setSupportButtonTintList(colorStateList);
AppCompatCheckBox cbSelected = (AppCompatCheckBox) findViewById(R.id.cbSelected);
cbSelected.setSupportButtonTintList(colorStateList);
【讨论】:
【参考方案2】:试试这个
AppCompatRadioButton newRadioButton = new AppCompatRadioButton(this);
AppCompatCheckBox newCheckBox = new AppCompatCheckBox(this);
插入
RadioGroup newRadioButton = new RadioGroup(this);
CheckBox newCheckBox = new CheckBox(this);
【讨论】:
【参考方案3】:您可以像这样创建动态RadioButton
:
RadioButton male = new RadioButton(ReservationContact.this);
male.setTextColor(Color.BLACK);
male.setText("Male");
male.setSelected(true);
male.setId(0);
这用于更改RadioButton
的圆圈的默认颜色。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
male.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(ReservationContact.this, R.color.background)));
male.setHighlightColor(getResources().getColor(R.color.background));
【讨论】:
【参考方案4】:对于CheckBox
,将您的CheckBox
替换为AppCompatCheckBox
并调用以下方法:
public static void setCheckBoxColor(AppCompatCheckBox checkBox, int uncheckedColor, int checkedColor)
ColorStateList colorStateList = new ColorStateList(
new int[][]
new int[] -android.R.attr.state_checked , // unchecked
new int[] android.R.attr.state_checked // checked
,
new int[]
uncheckedColor,
checkedColor
);
checkBox.setSupportButtonTintList(colorStateList);
我认为RadioButton
应该是类似的。您可以检查android.R.attr
中声明的属性并更改代码。
【讨论】:
【参考方案5】:我尝试了几种以编程方式实现它的方法,但除了遵循之外,没有一种方法对我有用。把它放在这里,以防有人觉得它有帮助。
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/radio_btn"
android:layout_
android:layout_
android:background="@null" />
创建一个 ColorStateList
private fun getRadioButtonColor(): ColorStateList
val states = arrayOf(
intArrayOf(-android.R.attr.state_checked),
intArrayOf(android.R.attr.state_checked))
val colors = intArrayOf(
ContextCompat.getColor(context, R.color.grey2),
ContextCompat.getColor(context, R.color.actionBlue)
)
return ColorStateList(states, colors)
然后使用 CompoutButtonCompat 类中的 setButtonTintList 来设置这个 colorStateList
CompoundButtonCompat.setButtonTintList(radio_btn, getRadioButtonColor())
【讨论】:
【参考方案6】:我继续ywwynm的回答。
Google 限制了 setSupportButtonTintList,因此无法使用它。
解决方法是将按钮用作 TintableCompoundButton 接口,其中方法不受限制。
适用于 AppCompatRadioButton 的 API 19+。 AppCompatCheckbox 实现了相同的接口,因此理论上它应该也能正常工作,但我还没有测试过。
玩得开心:)
public static void setAppCompatRadioButtonColor(AppCompatRadioButton radioButton, int uncheckedColor, int checkedColor)
ColorStateList colorStateList = new ColorStateList(
new int[][]
new int[] -android.R.attr.state_checked , // unchecked
new int[] android.R.attr.state_checked // checked
,
new int[]
uncheckedColor,
checkedColor
);
((TintableCompoundButton) radioButton).setSupportButtonTintList(colorStateList);
【讨论】:
【参考方案7】:尝试添加这一行:
app:buttonTint="@color/yellow"
xml 中的示例:
<RadioButton
android:id="@+id/radio"
android:layout_
android:layout_
app:buttonTint="@color/yellow"
android:text=" Radio"
android:textColor="@color/yellow" />
【讨论】:
【参考方案8】: 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.image);
rb.setHighlightColor(Color.parseColor("#0c83bd"));
);
【讨论】:
如果用户设置了自己的 OnCheckedChangeListener 会怎样?以上是关于Android:以编程方式更改 RadioButtons 和复选框的颜色的主要内容,如果未能解决你的问题,请参考以下文章