Intereting Posts
Android AVD устанавливает настраиваемое оборудование Как добавить значок в EditText в Android? Android In App Purchase "Предмет, который вы запросили, недоступен для покупки" Ошибка Открытие Android-приложения из календаря Узнайте, установлены ли разные обои для домашнего и фиксированного экрана Проблема с сертификатом: на странице SSL появляется сообщение «вам нужно установить контакт блокировки экрана или пароль, прежде чем вы сможете использовать хранилище учетных данных» на Android Запись наложения текста / изображения на Android BetterPickers без библиотеки поддержки Как отправить текст через формы с помощью JSoup Фрагмент как синглтон в Android Использование локального json-файла в Android Поднятие тоста из AsyncTask Произошла утечка памяти (утечка активности), вызванная CookieSyncManager? Поиск определенной строки в приложении Youtube из моего приложения Как проверить значения TextInput в реакции native?

Установка цвета текста с использованием привязки данных на 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}"