android - 如何更改切换按钮未选中状态可绘制图像颜色?
问题描述
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);
}
解决方案
推荐阅读
- angular - 以 ? 命名的对象属性 不能在 Angular 中的地图内部工作
- c++ - 带有 cpprest 的多个 POST 请求,没有多线程和服务器停止
- r - 无效的 JSON - DataTables - Kubernetes 上的 R ShinyProxy
- php - PHP工匠服务未更新
- html - 带有2个选择组的Angularjs下拉列表如何实现过滤器
- python - 如何在Discord py的给定角色名称列表中查找用户是否具有角色
- ms-access - MS Access Listbox 的记录集从 Sqlite 设置为 ADODB 记录集时仅显示一条记录
- c++ - 赋值运算符未调用参数化构造函数,而代码中存在复制构造函数
- android - HMS Push Kit Notification 有时作为数据到达,有时作为同一 JSON 正文的通知
- python - 要求 Weblogic 停止所有处于运行状态的托管服务器 WLST 脚本,除了 AdminServer