材料芯片 - 找不到资源ID(颜色/图标)

问题描述 投票:0回答:1

相关代码:

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)
    }
}

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

我可以通过添加@SuppressLint("ResourceType")来修复此错误,但是在到达此代码时,这会导致运行时错误,无法找到颜色ID或drawable资源

如果我评论颜色和保持drawables错误是android.content.res.Resources$NotFoundException: Can't load chip resource ID #0x7f070078 颜色的错误是 android.content.res.Resources$NotFoundException: Resource ID #0xff115fff

任何帮助表示赞赏。

我试图做的是添加一个芯片,我指定的图标和我选择的颜色,这是我希望实现enter image description here的结果

android android-layout kotlin material-design
1个回答
1
投票

您遇到的错误之一是预期的颜色资源ID(R.color。)

这是因为你没有将R.color.tint_resource传递给setChipIconTintResourcesetChipStrokeColorResource而是通过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
© www.soinside.com 2019 - 2024. All rights reserved.