首页 > 解决方案 > 材料芯片 - 找不到资源 ID(颜色/图标)

问题描述

相关代码:

fun updateCategories(categories: List<Category>) {
    categories.forEach {
        var chipText = "${it.title.capitalize()} (${it.amount})"
        val chip = Chip(context)
        chip.text = chipText
        chip.isCheckable = true
        chip.chipBackgroundColor = null
        when(it.title.toLowerCase()){ 
            "utilities" -> {
                chip.setChipIconTintResource(Color.parseColor("#115FFF"))
                chip.setChipStrokeColorResource(Color.parseColor("#115FFF"))                    
           chip.setChipDrawable(ChipDrawable.createFromResource(this.context, R.drawable.ic_utilities))
            }

        chips_group.addView(chip)
    }
}

所以对于这段代码,我有2个错误, Expected a color resource id (R.color.) but received an RGB integer颜色和Expected resource of type xmldrawables

我可以通过添加 a 来修复此错误@SuppressLint("ResourceType"),但这会导致在到达此代码时出现运行时错误,即找不到颜色 ID 或可绘制资源

如果我评论颜色并保留可绘制对象 android.content.res.Resources$NotFoundException: Can't load chip resource ID #0x7f070078 的错误是颜色的错误是
android.content.res.Resources$NotFoundException: Resource ID #0xff115fff

任何帮助表示赞赏。

我试图做的是添加一个带有我指定的图标和我选择的颜色的芯片,这是我希望达到的结果 在此处输入图像描述

标签: androidandroid-layoutkotlinmaterial-design

解决方案


您面临的错误之一是预期颜色资源 id (R.color.)

那是因为不是传递R.color.tint_resourcesetChipIconTintResource并且setChipStrokeColorResource你正在传递Color.parseColor(colorString)

将十六进制代码移动到colors.xml并使用它们。

第二件事,你得到资源未找到异常的原因是它createFromResource需要一个 xml 资源并且你传递了一个可绘制资源。因此,在 res/xml 文件夹中创建一个 xml 资源文件。

进行更改后,您的代码将如下所示。

chip.setChipIconTintResource(R.color.chip_icon_tint)
chip.setChipStrokeColorResource(R.color.chip_stroke_color)
chip.setChipDrawable(
    ChipDrawable.createFromResource(this, R.xml.chip_resource)
)

最后,@SuppressLint与解决问题相比,添加只是抑制警告会增加运行时崩溃的可能性。

设置芯片图标:

chip.chipIcon = ContextCompat.getDrawable(this, R.drawable.ic_utilities)

设置笔画宽度:

chip.chipStrokeWidth = 6f

推荐阅读