相关代码:
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 xml
代表可绘制对象
我可以通过添加@SuppressLint("ResourceType")
来解决此错误,但这在到达此代码时会导致运行时错误,原因是找不到颜色ID或可绘制对象的资源
如果我注释颜色并保留可绘制对象,则错误为
android.content.res.Resources$NotFoundException: Can't load chip resource ID #0x7f070078
颜色的错误是
android.content.res.Resources$NotFoundException: Resource ID #0xff115fff
感谢您的帮助。
答案 0 :(得分:1)
您面临的错误之一是预期的颜色资源ID(R.color。)
那是因为您没有传递R.color.tint_resource
到setChipIconTintResource
和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