Привязка данных textColor из переменной - PullRequest
0 голосов
/ 26 апреля 2020

Я хочу использовать привязку данных с переменными для цветов в xml. Вот мой код:

xml:

<data>
    <import type="androidx.core.content.ContextCompat"/>
    <variable
        name="settings"
        type="..censored..Settings" />
</data>

<com.google.android.material.textfield.TextInputEditText
                android:id="@+id/editText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:textColor="@{ContextCompat.getColor(context, settings.primaryTextColor)}"
                android:textColorHint="@{ContextCompat.getColor(context, settings.primaryHintColor)}"
                />

Настройки:

data class Settings(val context: Context) {
var primaryTextColor: Int
var primaryHintColor: Int

init {
    primaryTextColor = R.color.defaultText

    primaryHintColor = R.color.defaultHint

}

Однако я получаю сообщение об ошибке

Не удается найти установщик, который принимает тип параметра 'int'

Как получить цвета привязки данных с переменными?

1 Ответ

0 голосов
/ 26 апреля 2020

Для этого вы можете использовать BindingAdapter.

@BindingAdapter("textColor")
fun bindTextColor(textInputEditText: TextInputEditText, textColorResource: Int?) {
    if (textColorResource != null) {
       textInputEditText.setTextColor(ContextCompat.getColor(textInputEditText.context, textColorResource))
    }
}

@BindingAdapter("textColorHint")
fun bindTextColor(textInputEditText: TextInputEditText, textColorResource: Int?) {
    if (textColorResource != null) {
       textInputEditText.setHintTextColor(ContextCompat.getColor(textInputEditText.context, textColorResource))
    }
}

В вашем XML

<data>
    <variable
        name="settings"
        type="..censored..Settings" />
</data>

<com.google.android.material.textfield.TextInputEditText
                android:id="@+id/editText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="text"
                app:textColor="@{settings.primaryTextColor}"
                app:textColorHint="@{settings.primaryHintColor}"
                />
...