Je dois concaténer ces deux chaînes à partir de mes fichiers de ressources/valeurs:
<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 devrais-je faire ?
Je suppose que la réponse est quelque part ici dans ce lien vers la documentation
ou est-ce quelque chose comme utiliser & ;
pour le caractère "&" ??
Même si vous utilisez le formatage de chaîne, il vous faut parfois des espaces au début ou à la fin de votre chaîne. Dans ces cas, échapper avec l'attribut \
, ni l'attribut xml:space
n'aide à rien. Vous devez utiliser l'entité HTML  
pour un espace.
Utilisez  
pour les espaces insécables.
Utilisez  
pour l’espace normal.
J'ai rencontré le même problème. Je voulais laisser un blanc à la fin d'une chaîne de ressources représentant un nom de champ à l'écran.
J'ai trouvé une solution sur ce problème de rapport: https://github.com/iBotPeaches/Apktool/issues/124
C'est la même idée que suggère Duessi. Insérez \u0020
directement dans le XML pour un blanc que vous souhaitez conserver.
Exemple :
<string name="your_id">Score :\u0020</string>
Le remplacement est fait au moment de la construction, donc cela n’affectera pas les performances de votre jeu.
Cette documentation suggère que les citations fonctionnent:
<string name="my_str_spaces">" Before and after? "</string>
Je viens d'utiliser le code UTF pour l'espace "\ u0020" dans le fichier strings.xml.
<string name="some_string">\u0020The name of my string.\u0020\u0020</string>
fonctionne très bien. (Android aime les codes UTF)
Cette question est peut-être ancienne, mais la manière la plus simple 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 le faire comme vous le faisiez alors je pense que vous devez lui dire que les espaces sont pertinents en les évitant:
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>
Cependant, je voudrais utiliser format 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);
utilisez "" avec la valeur de ressource de chaîne.
Exemple : "valeur avec espaces"
OU
utilisez le code\u0020 pour les espaces.
Bien travailler 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'écranici Image de l'affichage Fonctionnement de ce code
Un argument peut être fait pour l'ajout d'espace par programme. Étant donné que ces cas seront souvent utilisés dans des concaténations, j'ai décidé d'arrêter la folie et de ne faire que l'ancien + " " +
. Celles-ci auront un sens dans les la plupart langues européennes, si je comprends bien.
Toutes les réponses ici n'ont pas fonctionné pour moi. Au lieu de cela, pour ajouter un espace à la fin d'une chaîne dans XML
j'ai fait ceci
<string name="more_store">more store<b> </b> </string>
Il existe également la solution consistant à utiliser CDATA
. Exemple:
<string name="test"><![CDATA[Hello world]]></string>
Mais en général, je pense que \u0020
est suffisant.
Je n'ai aucune idée d'Android en particulier, mais cela ressemble au traitement habituel des espaces XML - les espaces de début et de fin au sein d'un élément sont généralement considérés comme non significatifs et supprimés. 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>
Si vous avez besoin d'espace pour le concaténer ultérieurement avec d'autres chaînes, vous pouvez utiliser l'approche de formatage de chaîne consistant à ajouter des arguments à votre définition de chaîne:
<string name="error_">Error: %s</string>
Puis formatez la chaîne comme suit:
String message = context.getString(R.string.error_, "Something went wrong")
Cela ne répond peut-être pas à la question (comment conserver les espaces blancs en XML), mais cela peut résoudre le problème sous-jacent de manière plus harmonieuse.
Au lieu de ne compter que sur les ressources XML, concaténez à l'aide de chaînes de formatage . Supprimez tout d'abord les espaces.
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on</string>
<string name="Toast_Memory_GameWon_part2">flips !</string>
Et construisez ensuite 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();