web-dev-qa-db-fra.com

déclaration de format dans un fichier de ressources de chaîne

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.

120
CocoNess

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);
222
LocalPCGuy

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));
99
Sherif elKhatib

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.)

11
Timo Bähr

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);
7