字符串资源文件中的format语句

时间:2012-09-27 18:02:48

标签: android android-layout android-xml

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

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

是否可以定义格式字符串,例如下面的格式字符串

 result_str = String.format("Amount: %.2f  for %d days ",  var1, var2);
在strings.xml资源文件中

我试图逃避特殊字符,但它不起作用。

5 个答案:

答案 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);

(与LocalPCGuyGiovanny 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