首页 > 解决方案 > 如何更改切换按钮未选中状态可绘制图像颜色?

问题描述

Que:如何在不使用Android中的选择器的情况下以编程方式在黑暗主题/夜间模式下更改切换按钮未选中状态可绘制图像的颜色?

(基本上,我想更改从矢量资产下载并在工具按钮中使用的图像的填充颜色)

我有一个切换按钮:

 <ToggleButton
            android:id="@+id/toggleButton"
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:background="@drawable/favorite"
            android:buttonTint="@color/colorWhite"
            android:textOff=""
            android:textOn="" />

在里面,当你打开这个 XML 时,我坐在里面,android:background="@drawable/favorite"它看起来像:

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

矢量资产图片:ic_star_border_black_24dp

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z" />
</vector>

所以第一个项目(图像)是红色,第二个项目(图像:ic_star_border_black_24dp)是黑色,它是边框,基本上是星形图像。

现在,当我在适配器中执行此操作时:

if (RemindMe.getInstance().isNightModeEnabled) {

            }

在这种情况下,我想将这个默认的黑色图像 (ic_star_border_black_24dp) 更改为白色。

我怎样才能做到这一点?

请注意:我检查了堆栈溢出中关于此的几乎所有答案,但建议与选择器/或拍摄一张新的白色图像有关,我不想这样做,因为我已经为这个简单的事情准备了 2 张图像。

我试过这个,但没有效果:

    if (RemindMe.getInstance().isNightModeEnabled) {
                    PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(Color.WHITE,
                            PorterDuff.Mode.SRC_ATOP);

                    context.getResources().getDrawable(R.drawable.ic_star_border_black_24dp).setColorFilter(port

erDuffColorFilter);
            }

标签: android

解决方案


推荐阅读