如何在Android中更改默认的CheckBox颜色?
默认情况下,CheckBox的颜色是绿色的,我想要改变这个颜色。
如果不可能的话,请告诉我如何制作自定义的CheckBox?
我的目标是使用自定义复选框按钮并 去掉强调颜色按钮的色调。我尝试了被接受的答案,但没有奏效,相反,这个对我有用:
在styles.xml
文件中
<style name="Theme.Checkbox" parent="Widget.AppCompat.CompoundButton.CheckBox">
<item name="android:button">@drawable/theme_checkbox_button</item>
<item name="android:drawableLeft">@android:color/transparent</item>
<item name="android:drawablePadding">10dp</item>
<item name="android:buttonTint">@android:color/transparent</item>
<item name="android:buttonTintMode">screen</item>
</style>
现在对于这个问题,只需要使用android:buttonTint
和android:buttonTintMode
两个必要属性。
现在是一些额外的内容:
android:button
设置为一个选择器drawable。android:drawableLeft
和android:drawablePadding
。你可以尝试下面的代码,它对我有效。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/checked"
android:state_checked="true">
<color android:color="@color/yello" />
</item>
<!-- checked -->
<item android:drawable="@drawable/unchecked"
android:state_checked="false">
<color android:color="@color/black"></color>
</item>
<!-- unchecked -->
<item android:drawable="@drawable/checked"
android:state_focused="true">
<color android:color="@color/yello"></color>
</item>
<!-- on focus -->
<item android:drawable="@drawable/unchecked">
<color android:color="@color/black"></color>
</item>
<!-- default -->
</selector>
和复选框
<CheckBox
Button="@style/currentcy_check_box_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="@string/step_one_currency_aud" />
我更喜欢我创建的这个扩展函数:
fun CheckBox.setTint(@ColorInt color: Int?) {
if (color == null) {
CompoundButtonCompat.setButtonTintList(this, null)
return
}
CompoundButtonCompat.setButtonTintMode(this, Mode.SRC_ATOP)
CompoundButtonCompat.setButtonTintList(this, ColorStateList.valueOf(color))
}
如果有人也需要,它与我对ImageView的代码非常相似:
fun ImageView.setTint(@ColorInt color: Int?) {
if (color == null) {
ImageViewCompat.setImageTintList(this, null)
return
}
ImageViewCompat.setImageTintMode(this, Mode.SRC_ATOP)
ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(color))
}
android:button="@android:drawable/..."
这是一个不错的选项,但为了使其正常工作,我发现您需要添加开关逻辑来显示/隐藏勾号,像这样:
checkBoxShowPwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// checkbox status is changed from uncheck to checked.
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int btnDrawable = android.R.drawable.checkbox_off_background;
if (isChecked)
{
btnDrawable = android.R.drawable.checkbox_on_background;
}
checkBoxShowPwd.setButtonDrawable(btnDrawable);
}
});
您可以通过将<CheckBox>
嵌入到<LinearLayout>
中来更改其背景颜色。然后将<LinearLayout>
的背景颜色更改为所需的颜色。
fun CheckBox.tint(colors: ColorStateList) {
buttonTintList = colors
}
fun CheckBox.tint(@ColorInt color: Int) = tint(context.colorStateList(color))
fun SeekBar.tint(@ColorInt color: Int) {
val s1 = ColorStateList.valueOf(color)
thumbTintList = s1
progressTintList = s1
}
fun ProgressBar.tint(@ColorInt color: Int, skipIndeterminate: Boolean = false) {
val sl = ColorStateList.valueOf(color)
progressTintList = sl
secondaryProgressTintList = sl
if (!skipIndeterminate) indeterminateTintList = sl
}
android:buttonTint="@color/mybrown"
进行设置是改变方框颜色的简单方法。 - shauvikapp:buttonTint="@color/mybrown"
来代替,这样可以在API < 21上工作。 - Nikaoto