使用resValue从build.gradle生成包含%的字符串资源

时间:2015-04-15 16:17:33

标签: android xml escaping android-gradle

我的 build.gradle 中有一个自定义任务,它会生成一些字符串资源:

android.defaultConfig.resValue "string", "my_string", "Some Value"

一切正常:字符串在 generated.xml 中正确显示,可以通过应用程序代码中的getResources().getString(R.id.my_string)访问。

当其中一个字符串包含%符号时,它不起作用。它给出了这个错误:

  

错误:(1)以非位置格式指定的多个替换;你的意思是添加formatted =“false”属性吗?

我从Android XML Percent Symbol了解到,对于 strings.xml 中的字符串资源,通常会解决此问题,方法是提供额外的formatted="false"属性,如下所示:

<string formatted="false">My string with a % symbol</string>

如何在构建脚本中使用formatted="false"生成字符串时包含resValue属性?

(我也尝试按照建议使用双倍%转义,但这会导致%%出现在最终字符串中。)

2 个答案:

答案 0 :(得分:1)

我通过在gradle任务中的字符串生成时用双重转义的unicode值替换原始%符号来解决它。

android.defaultConfig.resValue "string", "my_string", \
    "String with a % symbol".replaceAll("%","\\\\u0025")

答案 1 :(得分:0)

您可以在xml中使用%

在你的xml中尝试这种格式\ %%

<string name="foo">percent symbol 50\%% </string>