【问题标题】:Android: How to change default color of custom checkboxes?Android:如何更改自定义复选框的默认颜色?
【发布时间】:2021-05-10 01:04:20
【问题描述】:

我正在设置一个自定义复选框,但我似乎找不到更改其默认/系统颜色的方法。

这是我的复选框的代码:

<CheckBox
            android:id="@+id/item_checkbox"
            android:layout_width="30dp"
            android:layout_height="86dp"
            android:layout_marginStart="8dp"
            android:button="@drawable/custom_checkbox"
            android:checked="true"
            app:backgroundTint="@null"
            app:buttonTint="@null"
            android:scaleX="0.6"
            android:scaleY="0.6"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

这是custom_checkbox.xml的代码

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_checked="true"
        android:drawable="@drawable/checked" />
    <item android:state_pressed="true"
        android:drawable="@drawable/checked" />
    <item android:state_pressed="false"
        android:drawable="@drawable/unchecked" />
</selector>

这是checked.xml的代码:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <layer-list>
            <item>
                <shape android:shape="oval">
                    <corners android:radius="1dp" />
                    <stroke
                        android:width="1dp"
                        android:color="#777" />
                    <gradient
                        android:startColor="#990000"
                        android:centerColor="#990000"
                        android:endColor="#990000"
                        android:angle="270" />
                    <size
                        android:width="30dp"
                        android:height="30dp" />
                </shape>
            </item>

            <item
                android:width="8dp"
                android:height="2dp"
                android:top="20dp"
                android:left="6dp">
                <rotate
                    android:fromDegrees="45">
                    <shape android:shape="rectangle">
                        <solid android:color="#fff"/>
                    </shape>
                </rotate>
            </item>

            <item
                android:width="19dp"
                android:height="2dp"
                android:top="16dp"
                android:left="9dp">
                <rotate
                    android:fromDegrees="-45">
                    <shape android:shape="rectangle">
                        <solid android:color="#fff"/>
                    </shape>
                </rotate>
            </item>
        </layer-list>
    </item>

</selector>

最后,这是 unchecked.xml 的代码:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <corners android:radius="1dp" />
    <stroke
        android:width="1dp"
        android:color="#777" />
    <gradient
        android:startColor="#990000"
        android:centerColor="#990000"
        android:endColor="#990000"
        android:angle="270" />
    <size
        android:width="30dp"
        android:height="30dp" />
</shape>

但我没有使用自定义的红色,而是始终使用默认颜色显示它们,如下所示(尽管形状似乎正确显示为圆形):

已检查:

未选中:

有什么想法吗?

【问题讨论】:

    标签: android checkbox material-components-android


    【解决方案1】:

    如果您想使用自定义可绘制对象覆盖默认行为,以避免自定义背景不会被主题中定义的?attr/colorOnSurface(未选中)和?attr/colorSecondary(选中)着色,请设置 app:useMaterialThemeColorsfalse

    类似:

    <CheckBox
            ...
        app:useMaterialThemeColors="false"
        />
    

    【讨论】:

      【解决方案2】:

      您的选择器有问题。您定义了选中但没有取消选中。

      所以改成

         <selector xmlns:android="http://schemas.android.com/apk/res/android" >
              <item android:state_checked="true"
                  android:drawable="@drawable/checked" />
              <item android:state_pressed="true"
                  android:drawable="@drawable/checked" />
              <item android:state_pressed="false"
                  android:drawable="@drawable/unchecked" />
          </selector>
      

      这样的事情

      <?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:state_checked="true" android:drawable="@drawable/checked" />
          <item android:state_checked="false"  android:drawable="@drawable/unchecked" />
      </selector>
      

      【讨论】:

      • 感谢您的帮助,实际上,我之前的代码没有多大意义!
      猜你喜欢
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多