Привязка данных: есть ли способ ограничить тип целого числа ObservableInt, @ColorInt или @ColorRes - PullRequest
1 голос
/ 01 июня 2019

Когда мы используем библиотеку Android DataBinding, мы всегда пишем что-то вроде этого:

// layout xml
android:textColor="@{vm.textColor}"

// SomeVm.kt
var textColor = ObservableInt()
...
textColor.set(R.color.some_color)

Но это неправильно. TextView.setTextColor () требует параметр @ColorInt int, например:

public void setTextColor(@ColorInt int color);

Но мы установили ресурс @ColorRes int.

Итак, мой вопрос, есть ли способ ограничить переменную textColor только для @ColorInt наблюдаемой int?

Я пробовал:

var textColor = ObservableField<@ColorInt Int>()

Но код не выдает ошибку:

textColor.set(R.color.some_color)

1 Ответ

0 голосов
/ 14 июня 2019

Я не думаю, что речь идет об ограничении, а о том, чтобы дать методу setTextColor правильный тип параметра.

Вы пытались вместо этого сделать textColor.set(ContextCompat.getColor(context, R.color.some_color)), чтобы получить @ColorInt?Это должно сработать.

В противном случае создайте свой собственный BindingAdapter, например:

@BindingAdapter("textColor")
fun setTextColor(view: TextView, @ColorRes color: Int) = with(view) {
    textColor = ContextCompat.getColor(context, color)
}

И используйте его в макете, например app:textColor="@{vm.textColor}"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...