Формат в файле строковых ресурсов
У меня есть строки, определенные в обычном файле ресурсов strings.xml следующим образом:
<string name="hello_world"> HELLO</string>
Можно ли определить строки формата, такие как ниже
result_str = String.format("Amount: %.2f for %d days ", var1, var2);
в файле ресурсов strings.xml?
Я попытался ускользнуть от специальных символов, но не работал.
Ответы
Ответ 1
Вы должны добавить formatted="false"
в свой текстовый ресурс
Вот пример
В вашем strings.xml
:
<string name="all" formatted="false">Amount: %.2f%n for %d days</string>
В вашем коде:
yourTextView.setText(String.format(getString(R.string.all), 3.12, 2));
Ответ 2
Вам не нужно использовать formatted="false"
в вашем XML. Вам просто нужно использовать полнофункциональные маркеры строкового формата - %[POSITION]$[TYPE]
(где [POSITION]
- позиция атрибута, а [TYPE]
- тип переменной), а не короткие версии, например %s
или %d
.
Цитата из Android-документы: форматирование и стилизация строк:
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
В этом примере строка формата содержит два аргумента: %1$s
- это string и %2$d
- это десятичное целое число. Вы можете форматировать строку с помощью аргументы из вашего приложения:
Resources res = getResources();
String text = res.getString(R.string.welcome_messages, username, mailCount);
Ответ 3
Внутри файла strings.xml
укажите ресурс String следующим образом:
<string name="string_to_format">Amount: %1$f for %2$d days%3$s</string>
Внутри вашего кода (предположим, что он наследуется от Context) просто выполните следующее:
String formattedString = getString(R.string.string_to_format, floatVar, decimalVar, stringVar);
(По сравнению с ответом LocalPCGuy или Giovanny Farto M. метод String.format не требуется.)
Ответ 4
Цитата из Android Docs:
Если вам нужно отформатировать строки, используя String.format(String,
Object...)
, вы можете сделать это, поставив аргументы формата в Строковый ресурс. Например, со следующим ресурсом:
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
В этом примере строка формата имеет два аргумента: %1$s
- строка и %2$d
- десятичное число. Вы можете форматировать строку с аргументами из вашего приложения, например:
Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);