Подтвердить что ты не робот

Как использовать стили html в строках с аргументами формата?

В моем приложении я хотел бы определить строку формата в strings.xml, которая выглядит так (обратите внимание на теги <b>...</b>):

<string name="location"><b>Location:</b> %1$s</string>

И затем используйте getString (int, Object...) для замены в аргументе формата:

String formattedString = getString(R.string.location, "Edmonton, AB");

Это дает значение "Location: Edmonton, AB". Я хотел бы получить значение "<b>Location:</b> Edmonton, AB".

Есть ли способ сделать это, используя строковые форматы в файле strings.xml, не разбивая его на две строки?

4b9b3361

Ответ 1

В docs:

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

Например:

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

Удерживайте текст, который вы передаете в String.format()

String escapedUsername = TextUtils.htmlEncode(username);
Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), escapedUsername, mailCount);
CharSequence styledText = Html.fromHtml(text);

Ответ 2

Используйте String.Format. например.

  <string name="location"><![CDATA[<b>Location:</b> %s]]></string>

String formattedString = String.Format(getString(R.string.location), "Edmonton, AB");