GreenRobo GreenRobo - 1 year ago 97
Android Question

Use Placeholder with % sign in string.xml for String.format()

I am Using Placeholder %1$d in string.xml for

value, and then I want to Display
sign in same
so it's
. So I've use it like this.

<string name="uploadProgress">%1$d&#37;<string>

Now in Java Code I used it like this.

int progress = 10;
textView.setText(String.format(getString(R.string.uploadProgress), progress));

But It is Showing.

java.util.UnknownFormatConversionException: Conversion:

I Tried with

  1. %
    instead of

  2. Put a Space between
    (But I don't want space

But No Luck.

How can I achieve this? I've looked another SO Questions for solution but I'm not able to find particular one. Hope I'll get Help ASAP.


I've run into this as well. There are two ways to escape a literal percent symbol in XML string resources.

For your case (a string with parameters, e.g. %1$s) you should use %% to escape the percent symbol literal.

If your string does not have parameters, then you should use \u0025 to escape the literal percent symbol.

If you use %%in a string without parameters, then getString() will resolve it as a literal %% instead of escaping it. If you use \u0025 in a string with parameters, then getString() will crash trying to treat that % as a format parameter.