#android #kotlin #android-vectordrawable
#Android #kotlin #android-vectordrawable
Вопрос:
Мне нужно изменить оттенок значка моей MaterialButton, значок является векторным ресурсом xml, и я могу легко изменить оттенок в макете xml, но мне нужно программно изменить цвет одним щелчком мыши, я не могу найти что-то связанное с этой проблемой, это моя кнопка:
<com.google.android.material.button.MaterialButton
android:id="@ id/btnShowDepartmentList"
style="@style/com.madison.Button.IconButton"
app:iconSize="32dp"
android:padding="0dp"
android:paddingLeft="5dp"
android:paddingStart="5dp"
app:icon="@drawable/ic_list_thumbnails"
android:layout_width="42dp"
android:layout_height="42dp"
app:iconTint="@color/orangeLighter"
tools:ignore="RtlSymmetry"/> ```
Ответ №1:
Вы захотите использовать методы setIconTint(ColorStateList)
или setIconTintResource(Int)
MaterialButton. Например:
val button = findViewById<MaterialButton>(R.id.btnShowDepartmentList)
button.setOnClickListener {
button.setIconTintResource(R.color.orangeLighter)
}
Комментарии:
1. вы не можете установить цвет непосредственно в setIconTint, для этого требуется ColorStateList. вместо этого используйте setIconTintResource
2. Спасибо @sudesh! Я не знаю, была ли более старая версия библиотеки с этим методом или я просто ошибся с самого начала, но я обновлю свой ответ.
Ответ №2:
Вам нужно будет передать ColorStateList в iconTint программно.
btnShowDepartmentList.iconTint = ContextCompat.getColorStateList(activity, R.color.orangeLighter)
Ответ №3:
Это работает для меня:
btnShowDepartmentThumbnails.setOnClickListener {
btnShowDepartmentThumbnails.setIconTintResource(R.color.orangeLighter)
}
Моя ошибка заключалась в попытке установить оттенок значка таким образом:
btnShowDepartmentThumbnails.setOnClickListener {
it.setIconTintResource(R.color.orangeLighter)
}
Комментарии:
1. Причина, по которой это не работает, заключается в том, что тип
it
в лямбдаView!
-выражении равен (помните, чтоonClick()
методу интерфейса передается аргументView v
), а метод, который вы пытаетесь вызвать, является методомMaterialButton
. Вы могли бы выполнить приведение, если бы хотели использоватьit
:(it as MaterialButton).foo()