J'ai un tableau de chaînes dans lequel le %
symbole est utilisé. Format approprié pour l'utilisation de l' %
is %
. Lorsque j'ai une chaîne dans ce tableau avec plusieurs, %
cela me donne cette erreur.
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
Réponses:
L'outil Android Asset Packaging Tool (
aapt
) est devenu très strict dans sa dernière version et est maintenant utilisé pour toutes les versions d'Android. L'erreur aapt que vous obtenez est générée car elle n'autorise plus les spécificateurs de format non positionnels .Voici quelques idées sur la façon dont vous pouvez inclure le symbole% dans vos chaînes de ressources.
Si vous n'avez pas besoin de spécificateurs de format ou de substitutions dans votre chaîne, vous pouvez simplement utiliser l'
formatted
attribut et le définir surfalse
:Dans ce cas, la chaîne n'est pas utilisée comme chaîne de format pour le
Formatter
afin que vous n'ayez pas à échapper à vos symboles%. La chaîne résultante est "% a +% a == 2% a".Si vous omettez l'
formatted="false"
attribut, la chaîne est utilisée comme chaîne de format et vous devez échapper aux symboles%. Cela se fait correctement avec double-%:aapt
Ne vous donne maintenant aucune erreur mais selon la façon dont vous l'utilisez, la chaîne résultante peut être "%% a + %% a == 2 %% a" si aFormatter
est invoqué sans aucun argument de format :Sans aucun XML et code, il est difficile de dire quel est exactement votre problème, mais j'espère que cela vous aidera à mieux comprendre les mécanismes.
la source
Pour autoriser l'application à utiliser des chaînes formatées à partir de ressources, vous devez corriger votre XML. Ainsi, par exemple
devrait être remplacé par
Vous pouvez voir ce pour plus de détails.
la source
%1$s
,%2$s
etc.Vous pouvez échapper% en utilisant %% pour l'analyseur XML, mais il est affiché deux fois dans l'appareil.
Pour l'afficher une fois, essayez le format suivant:
\%%
Par exemple
est affiché comme
Fat Burning (50% to 60%)
dans l'appareilla source
Utilisation
<string name="win_percentage">%d%% wins</string>
obtenir
80% wins
comme une chaîne formatée.J'utilise la
String.format()
méthode pour obtenir le nombre inséré au lieu de%d
.la source
Dans votre fichier strings.xml, vous pouvez utiliser n'importe quel signe Unicode de votre choix.
Par exemple, le nombre Unicode pour le signe de pourcentage est 0025:
Vous pouvez voir une liste complète des signes Unicode ici
la source
%
caractère revient. Je crains que cela ne résout pas le problème.pour échapper au symbole de pourcentage, vous avez juste besoin de %%
par exemple :
renvoie "10%"
la source
10%
ne revient pas%10
. FIY: Lorsque vous utilisez,String.format
vous devez à chaque fois spécifier Locale. Vous pouvez être vraiment surpris lorsque vous ne mettez pas les paramètres régionaux et n'utilisez pas les paramètres régionaux arabes pour les numéros de format ...Pas exactement votre problème, mais un problème similaire.
Si vous avez plusieurs formats dans votre entrée de chaîne, vous ne devez pas utiliser "% s" plusieurs fois.
NE PAS:
FAIRE :
la source
Vous pouvez échapper le% en xml avec %%, mais vous devez définir le texte dans le code, pas dans la mise en page xml.
la source
Cela pourrait être un cas où l'IDE deviendrait trop strict.
L'idée est bonne, en général, vous devez spécifier l'ordre des variables de substitution afin que si vous ajoutez des ressources pour une autre langue, votre code java n'aura pas besoin d'être modifié. Cependant, cela pose deux problèmes:
Tout d'abord, une chaîne telle que:
à utiliser car vous aurez besoin de 2.1200 mg aura l'ordre le même dans n'importe quelle langue car cette quantité de masse est toujours représentée scientifiquement dans cet ordre.
La seconde est que si vous placez l'ordre des variables dans la langue dans laquelle vos ressources par défaut sont spécifiées (par exemple en anglais), il vous suffit de spécifier les positions dans les chaînes de ressources pour les langues et d'utiliser un ordre différent de votre langue par défaut.
La bonne nouvelle est que c'est simple à corriger. Même s'il n'est pas nécessaire de spécifier les positions et que l'IDE est trop strict, spécifiez-les quand même. Pour l'exemple ci-dessus, utilisez:
la source
Une méthode délicate: utiliser un petit signe de pourcentage comme ci-dessous
Signe de pourcentage sur Wikipédia
la source
Essayez celui-ci (à droite):
la source
Selon la documentation officielle de Google, utilisez% 1 $ s et% 2 $ s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling
Bonjour,% 1 $ s! Vous avez% 2 $ d nouveaux messages.
la source
Supposons que vous souhaitiez afficher (50% de réduction) et saisir 50 au moment de l'exécution. Voici le code:
Dans la classe java, utilisez ce code:
la source
Essayez d'utiliser une barre oblique inverse devant, comme ci-dessous:
la source