L'Android de l'Actif de l'Emballage de l'Outil (aapt
) est devenu très strict dans sa dernière version et est maintenant utilisé pour toutes les versions d'Android. Aapt d'erreur que vous obtenez est générée, car il ne permet plus de non-positionnelle les spécificateurs de format.
Voici quelques idées sur comment vous pouvez inclure l' %-symbole dans vos chaînes de ressource.
Si vous n'avez pas besoin de tout les spécificateurs de format ou de substitutions dans votre chaîne, vous pouvez simplement utiliser l' formatted
d'attribut et réglez - false
:
<string formatted="false">%a + %a == 2%a</string>
Dans ce cas, la chaîne n'est pas utilisée comme une chaîne de format pour l' Formatter
de sorte que vous n'avez pas échapper à votre %-symboles. La chaîne résultante est "% + %a == 2%".
Si vous omettez l' formatted="false"
d'attribut, la chaîne est utilisée comme une chaîne de format et vous avez pour échapper à l' %-symboles. C'est bien fait avec des double-%:
<string>%%a + %%a == 2%%a</string>
Maintenant, aapt
vous donne aucune erreur, mais selon la façon dont vous l'utilisez, la chaîne résultante peut être "%% + %%a == 2%%a" si un Formatter
est invoquée sans n'importe quel 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 c'est difficile de dire exactement quel est ton problème mais j'espère que cela vous aide à comprendre les mécanismes un peu mieux.
6 votes
Pouvez-vous afficher le fichier XML qui est à l'origine de cette erreur ? Il peut être très difficile d'identifier un problème sans en voir la cause.
0 votes
Il s'agit d'une erreur qui peut facilement être reproduite par n'importe quelle chaîne contenant 2 symboles % ou plus.
0 votes
Si vous ne recherchez pas un objectif de formatage, mieux vaut manière à accomplir.
0 votes
Dans mon cas, j'ai saisi par erreur le paramètre de formatage comme 1%$s, au lieu de %1$s.