#android #data-binding
#Android #привязка данных
Вопрос:
Это логические данные
<variable
name="isSelected"
type="boolean" />
Вот как я попытался изменить цвет фона представления на основе выбора, в моем случае я должен изменить цвет textviews, цвета фона и цвета значков на основе выбора.
Это то, что я пробовал, но я получаю ошибку в Android studio.
android:backgroundTint="@{isSelected ? ?attr/colorPrimaryVariant : ?attr/colorPrimary}"
Это ошибка
<expr> expected, got '?'
Ответ №1:
Я не уверен, что это все еще актуально. Я столкнулся с той же проблемой и нашел решение.
- Вы должны импортировать свой
R
класс
<import type="com.example.test.R" />
- Теперь вы можете использовать атрибут темы в выражении
"@{isSelected ? R.attr.colorPrimaryVariant : R.attr.colorPrimary}"
- Это также требует создания
BindingAdapter
, потому что без него произойдет сбой
Что-то вроде этого:
@BindingAdapter("backgroundAttr")
fun setBackgroundAttr(view: View, @AttrRes color: Int) {
view.setBackgroundColor(MaterialColors.getColor(view, color)
}
- Итак, в XML это будет выглядеть так
app:backgroundAttr="@{isSelected ? R.attr.colorPrimaryVariant : R.attr.colorPrimary}"
Комментарии:
1. Да, это актуально, может быть полезно для других разработчиков