Question

Je dois concaténer ces deux chaînes de mes ressources / fichiers valeur:

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2"> flips !</string>

Je le fais de cette façon:

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+total_flips+getString(R.string.Toast_Memory_GameWon_part2);

Toast.makeText(this, message_all_pairs_found, 1000).show();

Mais les espaces à la fin de la première chaîne et au début de la deuxième chaîne ont disparu (lorsque le Toast est affiché) ...

Que dois-je faire?

Je suppose que la réponse est quelque part dans cette lien

ou est-ce quelque chose comme l'utilisation de &amp ; pour le caractère "&" ??

Était-ce utile?

La solution

Même si vous utilisez la mise en forme de chaîne, parfois, vous avez encore besoin des espaces blancs au début ou à la fin de votre chaîne. Pour ces cas, ni échapper à \, ni attribut xml:space aide. Vous devez utiliser une entité HTML &#160; pour un espace.

Utilisez &#160; pour les espaces non-cassable.
Utilisez &#032; pour l'espace régulier.

Autres conseils

Je suis tombé sur la même question. Je voulais laisser un vide à la fin d'une chaîne de ressource représentant un nom de champ à l'écran.

J'ai trouvé une solution sur ce rapport d'émission: https://github.com/iBotPeaches/Apktool / questions / 124

Ceci est la même idée qui suggère Duessi. Insérez \u0020 directement dans le fichier XML pour une vierge que vous souhaitez conserver.

Exemple:

<string name="your_id">Score :\u0020</string>

Le remplacement est effectué au moment de la construction, donc il ne sera pas affecter les performances de votre jeu.

dans le fichier strings.xml je viens d'utiliser le code UTF pour l'espace "\ u0020".

<string name="some_string">\u0020The name of my string.\u0020\u0020</string>

fonctionne très bien. (Applications aime codes UTF)

Cette question peut-être vieux, mais maintenant la meilleure façon de le faire est d'ajouter des guillemets. Par exemple:

<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>

Si vous voulez vraiment faire la façon dont vous faisiez alors je pense que vous devez lui dire que les espaces blancs est pertinent en échapper:

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>

Cependant, j'utiliser formatage de chaîne pour cela. Quelque chose comme ce qui suit:

<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string>

puis

String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips);

utilisation "" avec la valeur de ressource de chaîne.

Exemple:    "Valeur avec des espaces"

ou

utilisez \ u0020 code pour les espaces.

Travailler bien J'utilise \ u0020

<string name="hi"> Hi \u0020 </string>
<string name="ten"> \u0020 out of 10  </string>
<string name="youHaveScored">\u0020 you have Scored \u0020</string>

fichier Java

String finalScore = getString(R.string.hi) +name+ getString(R.string.youHaveScored)+score+ getString(R.string.ten);
               Toast.makeText(getApplicationContext(),finalScore,Toast.LENGTH_LONG).show();

Capture d'écran ici Image de travail Affichage de ce code

Toutes les réponses ici ne fonctionnent pas pour moi. Au lieu de cela, d'ajouter un espace à la fin d'une chaîne dans XML Je l'ai fait

<string name="more_store">more store<b> </b> </string>

Un argument peut être fait pour ajouter l'espace d'un programme. Étant donné que ces cas seront souvent utilisés dans concaténations, j'ai décidé d'arrêter la folie et fais juste le vieux + " " +. Ceux-ci feront sens dans la plupart langues européennes, je rassemblerais.

Je n'ai aucune idée sur Android en particulier, mais cela ressemble à la gestion des espaces XML habituels - les espaces avant et dans un élément est généralement considéré comme insignifiant et enlevé. Essayez xml:space:

<string name="Toast_Memory_GameWon_part1" xml:space="preserve">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2" xml:space="preserve"> flips !</string>

Cela peut ne pas répondre à la question en fait (Comment garder en XML des espaces blancs), mais il peut résoudre le problème sous-jacent plus de grâce.

Au lieu de compter uniquement sur les ressources XML, concaténer en utilisant des chaînes de format. Alors d'abord enlever les espaces blancs

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on</string>
<string name="Toast_Memory_GameWon_part2">flips !</string>

Et puis construire votre chaîne différemment:

String message_all_pairs_found = 
      String.format(Locale.getDefault(), 
                    "%s %d %s", 
                    getString(R.string.Toast_Memory_GameWon_part1),
                    total_flips,
                    getString(R.string.Toast_Memory_GameWon_part2);

Toast.makeText(this, message_all_pairs_found, 1000).show();

Il y a aussi la solution d'utilisation CDATA. Exemple:

<string name="test"><![CDATA[Hello          world]]></string>

Mais je pense qu'en général \u0020 est assez bon.

Si vous avez besoin de l'espace dans le but de concaténer plus tard avec d'autres chaînes, vous pouvez utiliser la chaîne mise en forme l'approche d'ajouter des arguments à la définition de votre chaîne:

<string name="error_">Error: %s</string>

Ensuite, formatez la chaîne comme:

String message = context.getString(R.string.error_, "Something went wrong")

Il ne fonctionne pas avec xml: space = "conserver"

donc je l'ai fait la plus rapide =>

J'ai simplement ajouté un + » « + où je avais besoin ...

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top