171 votes

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

J'ai des chaînes définies dans le fichier de ressources strings.xml habituel 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 les caractères spéciaux mais cela ne fonctionne pas.

302voto

LocalPCGuy Points 1101

Vous n'avez pas besoin d'utiliser formatted="false" dans votre XML. Il vous suffit d'utiliser des marqueurs de format de chaîne de caractères entièrement qualifiés. %[POSITION]$[TYPE] (où [POSITION] est la position de l'attribut et [TYPE] est le type de variable), plutôt que les versions courtes, par exemple %s o %d .

Citation de Docs Android : Formatage et style des chaînes de caractères :

<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 un et %2$d est un nombre entier décimal. Vous pouvez formater la chaîne avec arguments de votre application comme ceci :

Resources res = getResources();
String text = res.getString(R.string.welcome_messages, username, mailCount);

106voto

Sherif elKhatib Points 23987

Vous devez ajouter formatted="false" à votre ressource de 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));

16voto

Timo Bähr Points 1294

Dossier intérieur strings.xml définir une ressource String comme ceci :

<string name="string_to_format">Amount: %1$f  for %2$d days%3$s</string>

Dans votre code (en supposant qu'il hérite de Context), faites simplement ce qui suit :

 String formattedString = getString(R.string.string_to_format, floatVar, decimalVar, stringVar);

(En comparaison avec la réponse de LocalPCGuy o Giovanny Farto M. la méthode String.format n'est pas nécessaire).

9voto

Giovanny Farto M. Points 101

Citation de Docs Android :

Si vous devez formater vos chaînes de caractères en utilisant String.format(String, Object...) alors vous pouvez le faire en mettant vos arguments de format dans la commande string. 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 des arguments de votre application comme ceci :

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

4voto

AllanRibas Points 21

Pour moi, cela a fonctionné comme ça en Kotlin :

ma chaîne.xml

 <string name="price" formatted="false">Price:U$ %.2f%n</string>

ma classe.kt

 var formatPrice: CharSequence? = null
 var unitPrice = 9990
 formatPrice = String.format(context.getString(R.string.price), unitPrice/100.0)
 Log.d("Double_CharSequence", "$formatPrice")

D/Double_CharSequence : Prix :U$ 99,90

Pour un résultat encore meilleur, on peut faire ainsi

 <string name="price_to_string">Price:U$ %1$s</string>

 var formatPrice: CharSequence? = null
 var unitPrice = 199990
 val numberFormat = (unitPrice/100.0).toString()
 formatPrice = String.format(context.getString(R.string.price_to_string), formatValue(numberFormat))

  fun formatValue(value: String) :String{
    val mDecimalFormat = DecimalFormat("###,###,##0.00")
    val s1 = value.toDouble()
    return mDecimalFormat.format(s1)
 }

 Log.d("Double_CharSequence", "$formatPrice")

D/Double_CharSequence : Prix :U$ 1.999,90

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X