Установка цвета текста с использованием привязки данных на Android

Я пытаюсь установить цвет текста TextView с помощью библиотеки привязки данных

 android:textColor="@{holder.getTitleColor(context, item)}" 

Где метод в классе Holder определяется как ниже

 public int getTitleColor(Context context, Item item) { ... } 

Независимо от того, возвращаю ли цвет int ( @ColorInt ) или цветной ресурс ( @ColorRes ), он окрашивает текст сплошным белым. Что я делаю не так?

Кажется, что int вы предоставляете, интерпретируется как шестнадцатеричный цвет, хотя кажется интуитивным, что этот сеттер должен ожидать идентификатор ресурса.

Используйте ссылку Context сгенерированную для каждого связанного вида, и используйте ее для преобразования идентификатора ресурса в цвет, на который вы указываете, как описано в руководстве DataBinding Dev :

Специальная переменная с именем context создается для использования в обязательных выражениях по мере необходимости. Значение контекста – это контекст из getContext () корневого представления.

Используйте его, чтобы установить цвет следующим образом:

  <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{data.text}" android:textColor="@{context.getColor(data.colorRes)}" /> 

Создать метод с помощью BindingAdapter

 @BindingAdapter({"bind:color"}) public static void setFont(TextView textView, Item item) { textView.setTextColor(<set color of your choice>); } 

И называть его из xml

 app:color="@{item}"