我在通常的strings.xml资源文件中定义了字符串,如下所示:
<string name="hello_world"> HELLO</string>
是否可以定义格式字符串,例如下面的格式字符串
result_str = String.format("Amount: %.2f for %d days ", var1, var2);
在strings.xml资源文件中?
我试图逃避特殊字符,但它不起作用。
答案 0 :(得分:205)
您不需要在XML中使用formatted="false"
。您只需要使用完全限定的字符串格式标记 - %[POSITION]$[TYPE]
(其中[POSITION]
是属性位置,[TYPE]
是变量类型),而不是短版本,例如{{1 }或%s
。
引自Android Docs: String Formatting and Styling:
%d
在此示例中,格式字符串有两个参数:
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
是a string和%1$s
是十进制整数。您可以使用格式化字符串 您的应用程序中的参数如下:%2$d
答案 1 :(得分:97)
您应该将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 :(得分:11)
内部文件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方法。)
答案 3 :(得分:6)
引自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);
答案 4 :(得分:2)
对我来说,它在科特林像这样工作:
我的string.xml
<string name="price" formatted="false">Price:U$ %.2f%n</string>
我的课。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:价格:U $ 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