Ответ 1
Почему бы не попытаться заменить '<', ' > ' и '\ на соответствующие символы юникода?
С уважением.
например:
У меня есть строка в ресурсах:
<string name="smth"><small>hey girls</small></string>
Когда я использую его в файлах ресурсов xml (например, в некотором текстовом виде),
android:text="@string/smth"
никаких проблем. Он учитывает "маленький" тег. Это делает строку меньшей. Но когда я хочу использовать его так:
Строка smth = getString (R.string.smth);
someTextView.setText(Html.fromHtml(чего-л));
в строке нет тегов!!!
Любая помощь оценивается. Dan
Почему бы не попытаться заменить '<', ' > ' и '\ на соответствующие символы юникода?
С уважением.
Использовать теги HTML с экранированными объектами.
В официальной документации на ваш вопрос отвечает
Иногда вам может понадобиться создать текстовый ресурс в стиле, который также используется как строка формата. Обычно это не сработает, потому что
String.format(String, Object...)
метод разделит весь стиль информацию из строки. Для этого нужно написать HTML-теги с экранированными объектами, которые затем восстанавливаются с помощьюfromHtml(String)
, после форматирования. Например:
Сохраняйте свой текстовый ресурс в стиле HTML как белую строку:
<resources>
<string name="welcome_messages">Hello, %1$s! You have <b>%2$d new messages</b>.</string>
</resources>
В этой отформатированной строке добавлен элемент <b>
. Обратите внимание, что открывающая скобка вытесняется HTML, используя нотацию <
.
Затем отформатируйте строку как обычно, но также вызовите fromHtml(String)
, чтобы преобразовать текст HTML в стилизованный текст:
Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
CharSequence styledText = Html.fromHtml(text);
Иногда только символы Unicode или <![CDATA[ your HTML ]]>
помогают, но не кавычки, как предложил Райкиран. Также см. Как заставить Resource.getStringArray работать с разметкой HTML в Android.
Если вы хотите, чтобы 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>
Просто введите свою строку в двойные кавычки " "
. Так что каждый раз, когда вам не нужно помещать соответствующие символы Юникода, вы можете просто использовать исходный текст, просто окруженный двойными кавычками. Помещение кавычек вокруг текста означает, что содержимое внутри является лишь частью простого текста и не предназначено для анализа.
например. <string name="smth">"<small>hey girls</small>"</string>
Эта проблема возникает из-за того, что теги следуют соглашениям HTML, поэтому всякий раз, когда вы пишете что-то между < и > он считается тегом. И андроид пытается его разобрать. И вы получаете ошибку, так как ее не обрабатывается в strings.xml.