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

Coc*_*ess 128 android android-layout android-xml

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

<string name="hello_world"> HELLO</string>
Run Code Online (Sandbox Code Playgroud)

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

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

在strings.xml资源文件中?

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

Loc*_*Guy 234

您不需要formatted="false"在XML中使用.您只需要使用完全限定的字符串格式标记 - %[POSITION]$[TYPE]([POSITION]属性位置和[TYPE]变量类型),而不是短版本,例如%s%d.

引用Android文档:字符串格式和样式:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
Run Code Online (Sandbox Code Playgroud)

在此示例中,格式字符串有两个参数:%1$s是字符串,%2$d是十进制整数.您可以使用应用程序中的参数格式化字符串,如下所示:

Resources res = getResources();
String text = res.getString(R.string.welcome_messages, username, mailCount);
Run Code Online (Sandbox Code Playgroud)

  • 下面是所有不同转换器的列表,您必须为数字类型选择合适的转换器,您可能需要%f(浮点数):http://docs.oracle.com/javase/1.5. 0 /文档/ API/JAVA/UTIL/Formatter.html (5认同)
  • res.getString(R.string.welcome_messages,username,mailCount)将完成这项工作.资源/上下文的getString方法包括格式化功能. (2认同)

She*_*tib 101

您应该添加formatted="false"到您的字符串资源


这是一个例子

在你的strings.xml:

<string name="all" formatted="false">Amount: %.2f%n  for %d days</string>
Run Code Online (Sandbox Code Playgroud)

在你的代码中:

yourTextView.setText(String.format(getString(R.string.all), 3.12, 2));
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您可以这样简化`String.format(getString(R.string.all),3.12,2)``getString(R.string.all,3.12,2)`. (17认同)
  • 根据格式化字符串的文档,没有必要.http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling (6认同)
  • 您可以通过包含两个%%来逃避百分号。此遵循标准格式语法。示例:String.format(“百分比%d %%或以浮动%.2f %%”,12、12.34f);将生成字符串“百分比为12%或浮动为12.34%” (2认同)

Tim*_*ähr 12

内部文件strings.xml定义一个String资源,如下所示:

<string name="string_to_format">Amount: %1$f  for %2$d days%3$s</string>
Run Code Online (Sandbox Code Playgroud)

在代码内部(假设它继承自Context),只需执行以下操作:

 String formattedString = getString(R.string.string_to_format, floatVar, decimalVar, stringVar);
Run Code Online (Sandbox Code Playgroud)

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


Gio*_* M. 8

引用来自Android文档

如果您需要使用来格式化字符串String.format(String, Object...),则可以通过将format参数放在字符串资源中来实现。例如,使用以下资源:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
Run Code Online (Sandbox Code Playgroud)

在此的示例格式字符串有两个参数:%1$s是一个字符串,%2$d是一个十进制数字。您可以使用应用程序中的参数来格式化字符串,如下所示:

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
Run Code Online (Sandbox Code Playgroud)