Привязка данных удалить HTML-теги из строки - PullRequest
0 голосов
/ 19 июня 2019

Я хочу использовать просто теги из xml-ресурсов String при создании данных.

public class StringUtils {
    public static String text(String a) {
        return a;
    }
}

XML:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{StringUtils.text(@string/underlined_text)}" />

String:

    <string name="underlined_text">This is a <u>underlined</u> text.</string>

В концекогда я отлаживал текстовый метод, я понял, что тег удален.

Ответы [ 3 ]

1 голос
/ 19 июня 2019

Скорее всего, его там никогда не было.

В строковом ресурсе распознанные встроенные элементы HTML, такие как <u>, интерпретируются как часть ресурса. Если вы позвоните getString(), эти HTML-элементы будут удалены. Если вы наберете getText() на Resources, вы получите CharSequence, который содержит разметку (например, UnderlineSpan).

Поскольку вы используете String везде, ваши HTML-элементы будут игнорироваться.

Я не совсем уверен, почему вы настраиваете привязку данных таким образом. Если вы используете:

android:text="@string/underlined_text"

ты получишь то, что хочешь, и быстрее. В конце концов, StringUtils ничего не делает.

Но, если вы действительно уверены, что хотите использовать привязку данных:

  • Вызовите getText() на Resources с вашим идентификатором ресурса строки
  • Передайте это CharSequence, чтобы перейти к выражению привязки данных

Кроме того, вы можете обернуть содержимое вашего строкового ресурса в CDATA, чтобы сохранить исходный HTML-код без изменений. Однако в какой-то момент вам нужно будет использовать Html.fromHtml() или что-то подобное, чтобы получить CharSequence с примененным форматированием.

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

Вы можете попробовать использовать escape-коды HTML:

<string name="underlined_text">This is a &lt;u&gt;underlined&lt;/u&gt; text.</string>

Я бы также спросил, действительно ли здесь требуется привязка данных - вы можете просто использовать android:text="@string/underlined_text"

Редактировать: Также натолкнулся на этот ответ , который может быть вам полезен

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

Как насчет:

android:text="@string/underlined_text"

Вы можете изменить определенную строку следующим образом, чтобы сохранить Spanned String:

<string name="underlined_text">This is a &lt;u&gt;underlined&lt;/u&gt; text.</string>
...