Как упомянуть атрибут (?attr) внутри троичного оператора в привязке данных Android?

#android #data-binding

#Android #привязка данных

Вопрос:

Это логические данные

   <variable
                name="isSelected"
                type="boolean" />
  

Вот как я попытался изменить цвет фона представления на основе выбора, в моем случае я должен изменить цвет textviews, цвета фона и цвета значков на основе выбора.

Это то, что я пробовал, но я получаю ошибку в Android studio.

         android:backgroundTint="@{isSelected ? ?attr/colorPrimaryVariant : ?attr/colorPrimary}"
  

Это ошибка

 <expr> expected, got '?'
  

Ответ №1:

Я не уверен, что это все еще актуально. Я столкнулся с той же проблемой и нашел решение.

  1. Вы должны импортировать свой R класс

<import type="com.example.test.R" />

  1. Теперь вы можете использовать атрибут темы в выражении

"@{isSelected ? R.attr.colorPrimaryVariant : R.attr.colorPrimary}"

  1. Это также требует создания BindingAdapter , потому что без него произойдет сбой

Что-то вроде этого:

 @BindingAdapter("backgroundAttr")
fun setBackgroundAttr(view: View, @AttrRes color: Int) {
    view.setBackgroundColor(MaterialColors.getColor(view, color)
}
  
  1. Итак, в XML это будет выглядеть так

app:backgroundAttr="@{isSelected ? R.attr.colorPrimaryVariant : R.attr.colorPrimary}"

Комментарии:

1. Да, это актуально, может быть полезно для других разработчиков