Android XML百分比符号

我有一个字符串数组,其中使用了%符号。使用%的正确格式是%。当我在该数组中有多个%的字符串时,它会给我这个错误。

 Multiple annotations found at this
line:
- error: Multiple substitutions specified in non-positional format;
did you mean to add the formatted="false" attribute?
- error: Found tag </item> where </string-array> is expected
140557 次浏览

尝试在它前面使用反斜杠,如下所示:

\%

Android资产打包工具(aapt)已经成为在最新版本中非常严格,现在用于所有 Android版本。你得到的aapt-error是生成的,因为它不再允许非位置格式说明符

下面是一些如何在资源字符串中包含%-符号的想法。

如果你的字符串中不需要任何格式说明符或替换,你可以简单地使用formatted属性并将其设置为false:

<string formatted="false">%a + %a == 2%a</string>

在这种情况下,字符串不会被用作Formatter的格式字符串,所以你不必转义%-symbols。结果字符串是“%a + %a == 2%a”。

如果省略formatted="false"属性,该字符串将被用作格式化字符串,并且必须转义%-symbols。使用double-%是正确的:

<string>%%a + %%a == 2%%a</string>

现在aapt不会给你任何错误,但取决于你如何使用它,如果在没有任何格式参数的情况下调用Formatter,则结果字符串可以是"%%a + %%a == 2%%a":

Resources res = context.getResources();


String s1 = res.getString(R.string.str);
// s1 == "%%a + %%a == 2%%a"


String s2 = res.getString(R.string.str, null);
// s2 == "%a + %a == 2%a"

没有任何xml和代码,很难说出您的问题究竟是什么,但希望这有助于您更好地理解机制。

为了允许应用程序使用资源中的格式化字符串,你应该纠正你的xml。举个例子

<string name="app_name">Your App name, ver.%d</string>

应该用

<string name="app_name">Your App name, ver.%1$d</string>

详细信息可以查看

可以用%%转义xml中的%,但需要在代码中设置文本,而不是在布局xml中设置文本。

对于XML解析器,可以使用%%转义%,但是在设备中会显示两次。

要显示一次,请尝试以下格式:\%%

例如

<string name="zone_50">Fat Burning (50\%% to 60\%%)</string>

表示为 Fat Burning (50% to 60%)在设备

试试这个(右):

<string name="content" formatted="false">Great application %s  ☞  %s  ☞  %s \\n\\nGo to download this application %s</string>

在你的strings.xml文件中,你可以使用任何你想要的Unicode符号。

例如,百分比符号的Unicode数字是0025:

<string name="percent_sign">&#x0025;</string>

你可以看到Unicode符号在这里的综合列表

这可能是IDE变得过于严格的情况。

这个想法是合理的,一般来说,你应该指定替换变量的顺序,这样当你为另一种语言添加资源时,你的java代码就不需要改变了。然而,这里有两个问题:

首先,一个字符串,如:

You will need %.5G %s

你需要2.1200毫克将在任何语言中具有相同的顺序,因为质量总量总是以科学的顺序表示。

第二,如果你把变量的顺序放在你默认资源指定的语言中(例如英语),那么你只需要指定资源字符串中的位置,使用与默认语言不同的顺序。

好消息是,这个问题很容易解决。即使不需要指定位置,IDE也过于严格,但无论如何都要指定它们。对于上面的例子使用:

您将需要%1$。5克% 2 $ s

使用

<string name="win_percentage">%d%% wins</string>

得到

80% wins作为格式化字符串。

我使用String.format()方法来获取插入的数字,而不是%d

一个棘手的方法:使用小百分号如下所示

 <string name="zone_50">Fat Burning (50&#65130; to 60&#65130;)</string>

%在维基百科上签名

根据谷歌官方文档,使用%1$s和%2$s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

你好,% 1 $ s !您有%2$d条新消息。

要转义百分比符号,只需要%%

例如:

String.format("%1$d%%", 10)

返回“10%”

不是你的问题,而是类似的问题。

如果字符串条目中有多个格式,则不应多次使用“%s”。

别:

<string name="entry">Planned time %s - %s (%s)</string>

做的事:

<string name="entry">Planned time %1$s - %2$s (%3$s)</string>