android - DrawableCompat.setTint() 是懒惰的吗?
问题描述
我正在设计一个应用程序,它在主要活动中有 3 个按钮,在一个片段中有几个按钮。我想更改片段中按钮的颜色,具体取决于切换主活动的哪个按钮。
color1.setOnClickListener {
brush_chosen = 1
color1.setBackgroundColor(R.color.black)
color2.setBackgroundColor(0x00000000)
color3.setBackgroundColor(0x00000000)
if (frag_num == 8 ){
frag_8p.set_frag_value(frag_num,brush_chosen)
}
}
函数 set_frag_value 是:
fun set_frag_value(frag_num:Int,brush:Int) : Int
{
brush_chosen=brush
return brush
}
这会改变Brush_chosen的值。然后我做了一个函数:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
ib0.setOnClickListener { view ->
Log.d("brush_color","Brush of 0 : "+brush_chosen)
if (brush_chosen==1)
{
Log.d("brush_color","Brush Confirm : "+brush_chosen)
DrawableCompat.setTint(ib0.drawable, ContextCompat.getColor(requireContext(),R.color.rndcolor1))
}
else if (brush_chosen==2)
{
Log.d("brush_color","Brush Confirm : "+brush_chosen)
DrawableCompat.setTint(ib0.drawable, ContextCompat.getColor(requireContext(),R.color.purple_500))
}
else if (brush_chosen==3)
{
Log.d("brush_color","Brush Confirm : "+brush_chosen)
DrawableCompat.setTint(ib0.drawable, ContextCompat.getColor(requireContext(),R.color.teal_200))
}
Log.d("brush_color","End of onclicklistener ")
}
}
我检查了日志,理论上这段代码应该可以正常工作。但是,我发现按钮颜色没有正确更改,即使我检查了我的应用程序是否正确打印了所有日志。例如,当我在主活动中单击按钮 color1 时,变量 Brush_chosen 变为 1,并且我单击的片段中的第一个按钮改变了它的颜色。但是我点击的第二个按钮并没有改变它的颜色。
我的代码使用 DrawableCompat 有什么问题吗?
解决方案
Android 在后台做了一些Drawable
状态缓存。您可能需要调用mutate()
要Drawable
着色的对象,然后设置新Drawable
的,以便正确显示着色。
推荐阅读
- jquery - 图像在子模态选项卡中不可见 - MVC 5 .NET 中的模态内模态
- python - 如何在 Python 中截取屏幕截图?
- r - 将文件名和工作表名称分配给 R 中的(多个)观察值
- vue.js - 使用 Vue/Axios 调用访问 Jenkins api 的问题
- javascript - 在背景上添加元素(圆圈)但在html css js中的文本后面
- cron - 如果 cron 作业在 Cronitor 上成功,则发送电子邮件
- javascript - Firebase 用户配置文件添加自定义字段
- maven - Maven 不在带有 Spring Boot 的多模块项目中运行单元测试
- java - 当布尔表达式为假时,for循环仍然有效
- java - 如何在 Java 中制作强化学习代理?