168

我在通常的 strings.xml 资源文件中定义了字符串,如下所示:

<string name="hello_world"> HELLO</string>

是否可以定义如下格式字符串

 result_str = String.format("Amount: %.2f  for %d days ",  var1, var2);

在strings.xml 资源文件中?

我尝试转义特殊字符,但它不起作用。

4

5 回答 5

297

您不需要formatted="false"在您的 XML 中使用。您只需要使用完全限定的字符串格式标记 - %[POSITION]$[TYPE][POSITION]属性位置和[TYPE]变量类型在哪里),而不是短版本,例如%sor %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);
于 2014-01-02T16:55:07.243 回答
106

您应该添加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));
于 2012-09-27T18:15:25.260 回答
16

内部文件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);

(与LocalPCGuyGiovanny Farto M的答案相比,不需要String.format 方法。)

于 2016-03-14T11:04:31.967 回答
9

来自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);
于 2014-06-07T14:51:28.767 回答
4

对我来说,它在 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

于 2020-06-24T14:06:56.360 回答