J'ai des chaînes définies dans le fichier de ressources habituel strings.xml comme ceci:
<string name="hello_world"> HELLO</string>
Est-il possible de définir des chaînes de format telles que celle ci-dessous
result_str = String.format("Amount: %.2f for %d days ", var1, var2);
dans le fichier de ressources strings.xml?
J'ai essayé d'échapper aux caractères spéciaux mais cela ne fonctionne pas.
Vous n'avez pas besoin d'utiliser formatted="false"
dans votre code XML. Vous devez simplement utiliser des marqueurs de format de chaîne qualifiés complets - %[POSITION]$[TYPE]
(où [POSITION]
est la position de l'attribut et [TYPE]
est le type de variable), plutôt que les versions abrégées, par exemple %s
ou %d
.
Citation de Android Docs: Formatage et style des chaînes :
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
Dans cet exemple, la chaîne de format a deux arguments:
%1$s
est une chaîne et%2$d
est un entier décimal. Vous pouvez formater la chaîne avec les arguments de votre application comme ceci:Resources res = getResources(); String text = res.getString(R.string.welcome_messages, username, mailCount);
Vous devez ajouter formatted="false"
à votre chaîne
Voici un exemple
Dans votre strings.xml
:
<string name="all" formatted="false">Amount: %.2f%n for %d days</string>
Dans votre code:
yourTextView.setText(String.format(getString(R.string.all), 3.12, 2));
Dans le fichier strings.xml
, définissez une ressource String comme ceci:
<string name="string_to_format">Amount: %1$f for %2$d days%3$s</string>
Dans votre code (supposez qu'il hérite du contexte), procédez comme suit:
String formattedString = getString(R.string.string_to_format, floatVar, decimalVar, stringVar);
(En comparaison avec la réponse de LocalPCGuy ou Giovanny Farto M. , la méthode String.format n'est pas nécessaire.)
Citation de Android Docs :
Si vous devez formater vos chaînes avec
String.format(String, Object...)
, vous pouvez le faire en plaçant vos arguments de format dans la ressource chaîne. Par exemple, avec la ressource suivante:<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
Dans cet exemple, la chaîne de format a deux arguments:
%1$s
est une chaîne et%2$d
est un nombre décimal. Vous pouvez formater la chaîne avec les arguments de votre application comme ceci:Resources res = getResources(); String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);