format statement in a string resource file

后端 未结 5 931
栀梦
栀梦 2020-11-29 17:28

I have strings defined in the usual strings.xml Resource file like this:

 HELLO

Is it pos

相关标签:
5条回答
  • 2020-11-29 17:37

    Inside file strings.xml define a String resource like this:

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

    Inside your code (assume it inherits from Context) simply do the following:

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

    (In comparison to the answer from LocalPCGuy or Giovanny Farto M. the String.format method is not needed.)

    0 讨论(0)
  • 2020-11-29 17:40

    You should add formatted="false" to your string resource


    Here is an example

    In your strings.xml :

    <string name="all" formatted="false">Amount: %.2f%n  for %d days</string>
    

    In your code:

    yourTextView.setText(String.format(getString(R.string.all), 3.12, 2));
    
    0 讨论(0)
  • 2020-11-29 17:44

    You do not need to use formatted="false" in your XML. You just need to use fully qualified string format markers - %[POSITION]$[TYPE] (where [POSITION] is the attribute position and [TYPE] is the variable type), rather than the short versions, for example %s or %d.

    Quote from Android Docs: String Formatting and Styling:

    <string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
    

    In this example, the format string has two arguments: %1$s is a string and %2$d is a decimal integer. You can format the string with arguments from your application like this:

    Resources res = getResources();
    String text = res.getString(R.string.welcome_messages, username, mailCount);
    
    0 讨论(0)
  • 2020-11-29 17:56

    Quote from Android Docs:

    If you need to format your strings using String.format(String, Object...), then you can do so by putting your format arguments in the string resource. For example, with the following resource:

    <string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
    

    In this example, the format string has two arguments: %1$s is a string and %2$d is a decimal number. You can format the string with arguments from your application like this:

    Resources res = getResources();
    String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
    
    0 讨论(0)
  • 2020-11-29 18:01

    For me it worked like that in Kotlin:

    my string.xml

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

    my class.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: Price :U$ 99,90

    For an even better result, we can do so

     <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: Price :U$ 1.999,90

    0 讨论(0)
提交回复
热议问题