У меня есть строки, определенные в обычном файле ресурсов strings.xml, например:
<string name="hello_world"> HELLO</string>
Можно ли определить строки формата, такие как приведенная ниже
result_str = String.format("Amount: %.2f for %d days ", var1, var2);
в файле ресурсов strings.xml?
Я попытался избежать специальных символов, но это не сработало.
android
android-resources
Коконесс
источник
источник
Ответы:
Вам не нужно использовать
formatted="false"
в своем XML. Вам просто нужно использовать полностью определенные маркеры строкового формата -%[POSITION]$[TYPE]
(где[POSITION]
- позиция атрибута, а[TYPE]
- тип переменной), а не короткие версии, например%s
или%d
.Цитата из Android Docs: Форматирование и стили строк :
источник
Вы должны добавить
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));
источник
formatted="false"
может означать, что строка не форматируется. Добавлено другое решение stackoverflow.com/a/20887690/228429String.format(getString(R.string.all), 3.12, 2)
этот путь:getString(R.string.all, 3.12, 2)
.25%
, Android выйдет из строя.Внутри файла
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 или Джованни Фарто М. метод String.format не нужен.)
источник
Цитата из Android Docs :
источник
Для меня в Котлине так работало:
мой string.xml
<string name="price" formatted="false">Price:U$ %.2f%n</string>
мой class.kt
var formatPrice: CharSequence? = null var unitPrice = 9990 formatPrice = String.format(context.getString(R.string.price), unitPrice/100.0) Log.d("Double_CharSequence", "$formatPrice")
D / Double_CharSequence: Цена: 99,90 долларов США
Для еще лучшего результата мы можем сделать это
<string name="price_to_string">Price:U$ %1$s</string> var formatPrice: CharSequence? = null var unitPrice = 199990 val numberFormat = (unitPrice/100.0).toString() formatPrice = String.format(context.getString(R.string.price_to_string), formatValue(numberFormat)) fun formatValue(value: String) :String{ val mDecimalFormat = DecimalFormat("###,###,##0.00") val s1 = value.toDouble() return mDecimalFormat.format(s1) } Log.d("Double_CharSequence", "$formatPrice")
D / Double_CharSequence: Цена: U $ 1.999,90
источник