Android: getString () из ресурсов теряет все теги в строке - PullRequest
18 голосов
/ 27 марта 2012

например:

У меня есть строка в ресурсах:

<string name="smth"><small>hey girls</small></string>

Когда я использую его в файлах ресурсов xml (например, в некоторых текстовых представлениях),

android:text="@string/smth"

нет проблем вообще. Учитывает «маленький» тег. Это делает строку меньше. Но когда я хочу использовать это так:

String smth = getString (R.string.smth);

someTextView.setText (Html.fromHtml (чего-л));

строка не имеет тегов !!!

Любая помощь приветствуется. Dan

Ответы [ 5 ]

37 голосов
/ 27 марта 2012

Используйте HTML-теги с экранированными сущностями.

На ваш вопрос дан прямой ответ в официальной документации !

Иногда вы можетехотите создать стилизованный текстовый ресурс, который также используется в качестве строки формата.Обычно это не работает, потому что метод String.format(String, Object...) удалит всю информацию о стиле из строки.Обходной путь к этому - записать теги HTML с экранированными сущностями , которые затем восстанавливаются с помощью fromHtml(String) после форматирования.Например:

Сохраните текстовый ресурс в стиле в виде строки с экранированием HTML:

<resources>
  <string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>
</resources>

В этой отформатированной строке добавлен элемент <b>.Обратите внимание, что открывающая скобка экранирована HTML, используя нотацию &lt;.Затем отформатируйте строку как обычно, но также вызовите fromHtml(String), чтобы преобразовать текст HTML в стилизованный текст:

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
CharSequence styledText = Html.fromHtml(text);
10 голосов
/ 27 марта 2012

Почему бы не попробовать заменить '<', '>' и '\' соответствующими символами Юникода?

Привет.

7 голосов
/ 02 марта 2015

Иногда помогают только символы Юникода или <![CDATA[ your HTML ]]>, но не кавычки, как предложил Раджкиран.Также см. Как заставить Resources.getStringArray работать с разметкой HTML в Android

4 голосов
/ 12 мая 2016

Если вы хотите, чтобы html-теги не удалялись с помощью getString (). Вы должны добавить тег и [! [CDATA]] в вашей строке, например:

<string name="get_string_with_Html_tags"><Data><![CDATA[ This is an example.
        <br><br>
        <font color=\'black\'>black text:
        </font>
        <br><br>
        <font color=\'red\'>red text</font>
        <br></br> ]]> </Data></string>
0 голосов
/ 27 марта 2012

Просто поместите вашу строку в двойные кавычки " ". Так что каждый раз, когда вам не нужно ставить соответствующие символы Юникода, вы можете просто использовать оригинальный текст, заключенный в двойные кавычки. Заключение в кавычки текста означает, что содержимое внутри - это просто часть обычного текста и не предназначено для анализа.

например. <string name="smth">"<small>hey girls</small>"</string>

Эта проблема возникает из-за того, что теги следуют соглашениям HTML, поэтому всякий раз, когда вы пишете что-то между <&>, это считается тегом. И андроид пытается разобрать его. И вы получаете ошибку, так как она не может быть проанализирована в strings.xml.

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