首页 > 解决方案 > 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 有什么问题吗?

标签: androidkotlinandroid-drawable

解决方案


Android 在后台做了一些Drawable状态缓存。您可能需要调用mutate()Drawable着色的对象,然后设置新Drawable的,以便正确显示着色。


推荐阅读