在 string.xml 中为 String.format() 使用带有 % 符号的占位符

Use Placeholder with % sign in string.xml for String.format()

我在 string.xml 中使用占位符 %1$d 作为 int 值,然后我想显示 % 登录相同 TextView 所以它是 %。所以我就这样用了。

<string name="uploadProgress">%1$d&#37;<string>

现在在Java代码中我是这样使用的

int progress = 10;
textView.setText(String.format(getString(R.string.uploadProgress), progress));

但是显示:

java.util.UnknownFormatConversionException: Conversion:

我试过:

  1. % 而不是 &#37;
  2. %1$d&#37;之间放一个Space(但我不想space 实际上。)

但运气不好。我怎样才能做到这一点?我已经查看了另一个 SO 问题以寻求解决方案,但我找不到特定的问题。

我也 运行 喜欢这个。有两种方法可以转义 XML 字符串资源中的文字百分号。

对于您的情况(带参数的字符串,例如 %1$d),您应该使用 %% 来转义百分号文字。

如果您的字符串没有参数,那么您应该使用 \u0025 来转义百分号。

如果您在不带参数的字符串中使用 %%,那么 getString() 会将其解析为文字 %% 而不是转义它。如果您在字符串 中使用 \u0025 参数,那么 getString() 会在尝试将 % 视为格式参数时崩溃。

如果您的字符串资源没有参数,那么您可以使用 formatted="false" 属性。

在你的情况下你需要使用双%