我在通常的 strings.xml 资源文件中定义了字符串,如下所示:
<string name="hello_world"> HELLO</string>
是否可以定义如下格式字符串
result_str = String.format("Amount: %.2f for %d days ", var1, var2);
在strings.xml 资源文件中?
我尝试转义特殊字符,但它不起作用。
我在通常的 strings.xml 资源文件中定义了字符串,如下所示:
<string name="hello_world"> HELLO</string>
是否可以定义如下格式字符串
result_str = String.format("Amount: %.2f for %d days ", var1, var2);
在strings.xml 资源文件中?
我尝试转义特殊字符,但它不起作用。
您不需要formatted="false"
在您的 XML 中使用。您只需要使用完全限定的字符串格式标记 - %[POSITION]$[TYPE]
([POSITION]
属性位置和[TYPE]
变量类型在哪里),而不是短版本,例如%s
or %d
。
来自 Android Docs 的引用:字符串格式和样式:
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
在这个例子中,格式字符串有两个参数:
%1$s
一个字符串和%2$d
一个十进制整数。您可以使用应用程序中的参数格式化字符串,如下所示:Resources res = getResources(); String text = res.getString(R.string.welcome_messages, username, mailCount);
您应该添加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));
内部文件strings.xml
定义一个字符串资源,如下所示:
<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 方法。)
来自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);
对我来说,它在 Kotlin 中是这样工作的:
我的字符串.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:价格: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