L'outil Asset emballage Android (aapt
) est devenu very strict in its latest release et est maintenant utilisé pour toutes versions Android. L'erreur aapt que vous obtenez est générée car elle n'autorise plus non-positional format specifiers.
Voici quelques idées pour inclure le symbole% dans vos chaînes de ressources.
Si vous ne avez pas besoin de spécificateurs de format ou des substitutions dans votre chaîne, vous pouvez simplement utiliser l'attribut formatted
et le mettre à false
:
<string formatted="false">%a + %a == 2%a</string>
Dans ce cas, la chaîne n'est pas utilisé comme chaîne de format pour le Formatter
afin que vous n'ayez pas à échapper votre% -symbols. La chaîne résultante est "% a +% a == 2% a".
Si vous omettez l'attribut formatted="false"
, la chaîne est utilisée comme chaîne de format et vous devez échapper à% -symbols. Cela se fait correctement avec double-%:
<string>%%a + %%a == 2%%a</string>
maintenant aapt
vous donne pas d'erreur, mais selon la façon dont vous l'utilisez, la chaîne résultante peut être « %% a + %% a == 2 %% un » si un Formatter
est invoqué sans format arguments:
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"
sans xml et le code, il est difficile de dire exactement ce que votre problème est, mais nous espérons que cela vous aide à comprendre les mécanismes un peu mieux.
Pouvez-vous poster le code XML qui est à l'origine de cette erreur? Il peut être très difficile d'identifier un problème sans en voir la cause. –
Il s'agit d'une erreur qui peut facilement être répliquée par n'importe quelle chaîne avec 2 symboles ou plus. – zaid
Si vous ne cherchez pas un but de formatage, mieux [way] (http://stackoverflow.com/a/9813801/2365197) accomplir. –