#android #android-layout #kotlin #material-design
#Android #android-макет #kotlin #материал-дизайн
Вопрос:
Соответствующий код:
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")
, но это привело к ошибкам во время выполнения при достижении этого кода о том, что ресурс не найден ни по идентификатору цвета, ни по отображаемому
Ошибка, если я комментирую цвета и сохраняю чертежи, заключается в том, android.content.res.Resources$NotFoundException: Can't load chip resource ID #0x7f070078
что ошибка для цветов является
android.content.res.Resources$NotFoundException: Resource ID #0xff115fff
любая помощь приветствуется.
Что я пытаюсь сделать, так это добавить чип с указанным мной значком и выбранным мной цветом, это результат, которого я надеюсь достичь
Ответ №1:
Одна из ошибок, с которыми вы сталкиваетесь, ожидается идентификатор цветного ресурса (R.color.)
Это потому, что вместо передачи R.color.tint_resource
в setChipIconTintResource
и setChipStrokeColorResource
вы передаете Color.parseColor(colorString)
Переместите шестнадцатеричные коды в colors.xml
и используйте их.
Во-вторых, причина, по которой вы получаете исключение «ресурс не найден», заключается в том, что createFromResource
требуется xml-ресурс и вы передаете извлекаемый ресурс. Итак, создайте файл ресурсов xml в папке res / 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
Комментарии:
1. Создайте XML-файл ресурсов в res / xml, содержащий что? как мне использовать svg, который я хочу использовать в нем? создайте новый векторный ресурс, как я делал?
2. Если все, что вы хотите, это установить векторный ресурс для чипа, просто сделайте это с помощью
chipIcon
(для использования проверьте обновленный ответ).3. Вы конвертировали SVG-файл в векторный ресурс? Я не вижу значок слева от утилит?
4. Вы уверены, что
chip.setChipIconTintResource(R.color.utilitiesColor)
это не работает? У меня это работает, и я вижу оттенок, добавленный к значку.5. Каково значение цвета
chip_icon_tint
?