返回

Android XML 中使用百分号时避免错误的指南

Android

## Android XML 中使用百分号的陷阱

介绍

在 Android 开发中,使用百分号符号 (%) 表示 HTML 实体 %。然而,在字符串数组中包含多个百分号时,可能会遇到错误。本文将探究此错误的原因和提供解决方案。

问题

当一个字符串数组中包含多个 % 符号时,会出现以下错误:

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

原因

这个错误的原因是 Android XML 解析器无法正确解析包含多个 &#37; 符号的字符串。

解决方案

有两种方法可以解决这个问题:

方法 1:格式化字符串

通过添加 formatted="false" 属性,可以显式指定字符串应按原样显示:

<string-array name="my_array">
    <item>This is a string with a percent symbol: &#37;</item>
    <item>This is another string with multiple percent symbols: &#37;&#37;</item>
</string-array>

方法 2:转义百分号

也可以通过使用转义字符 \ 转义百分号符号,使其不被解析器解释:

<string-array name="my_array">
    <item>This is a string with a percent symbol: \&#37;</item>
    <item>This is another string with multiple percent symbols: \&#37;\&#37;</item>
</string-array>

代码示例

以下代码展示了如何在 Java 中访问字符串数组:

String[] myArray = getResources().getStringArray(R.array.my_array);
for (String item : myArray) {
    Log.d("TAG", item);
}

输出

This is a string with a percent symbol: %
This is another string with multiple percent symbols: %%

结论

始终使用一致的方法处理百分号符号,以避免混淆。如果使用转义字符,请确保转义所有必要的字符。通过遵循本文中概述的解决方案,你可以避免此错误并确保 Android XML 中正确使用百分号。

常见问题解答

Q:为什么我应该使用 formatted="false" 属性?
A: formatted="false" 属性强制字符串按原样显示,而不进行任何格式化,从而防止百分号被解析。

Q:转义百分号比使用 formatted="false" 更好吗?
A: 这取决于具体情况。如果只使用几个百分号,转义可能更简洁。对于更长的字符串或具有多个百分号的字符串,formatted="false" 属性可能更清晰。

Q:我可以混合使用格式化和转义吗?
A: 不建议这样做,因为可能会导致混乱和不可预测的结果。

Q:我是否始终需要转义所有百分号?
A: 只在字符串数组中使用多个百分号时才需要转义。在其他情况下,通常不需要。

Q:此错误是否特定于 Android?
A: 是的,此错误仅在使用 Android XML 时才会出现。