Флорина Мунтенеску написала классный пост об использовании <annotation>
в строковых ресурсах для обеспечения гибкой разметки, которую вы можете обрабатывать в своем приложении с помощью пользовательских диапазонов. Я пытаюсь использовать его в привязке данных, но не могу понять, как получить SpannedString
строковый ресурс из привязки данных.
В моем макете у меня есть app:thingy="@{@string/my_annotated_string}"
как атрибут на TextView
. У меня есть адаптер привязки, настроенный для обработки thingy
атрибутов. Тем не менее, система привязки данных, кажется, настаивает на том, что мое значение равно String
.
Я пытался:
@BindingAdapter("thingy")
@JvmStatic
fun handleThingy(textView: TextView, thingy: SpannedString) { /* stuff goes here */ }
и
@BindingAdapter("thingy")
@JvmStatic
fun handleThingy(textView: TextView, thingy: Spanned) { /* stuff goes here */ }
и
@BindingAdapter("thingy")
@JvmStatic
fun handleThingy(textView: TextView, @StringRes thingy: Int) { /* stuff goes here */ }
Во всех случаях я получаю Cannot find the setter for attribute 'app:thingy' with parameter type java.lang.String on android.widget.TextView
ошибок сборки.
Если я использую String
или CharSequence
для типа параметра thingy
, он строится, но затем я получаю String
, и у меня нет интервалов аннотации из строкового ресурса.
Итак, как я могу:
- Получите
SpannedString
, соответствующий моему строковому ресурсу (то есть, что вы получите от getText()
вместо getString()
) или
- Получите идентификатор строкового ресурса моего строкового ресурса, чтобы я мог сам вызвать
getText()
, чтобы получить SpannedString