Is it possible to have placeholders in strings.xml for runtime values?

android, android-resources, string, string-formatting

Solution

Formatting and Styling

Yes, see the following from String Resources: Formatting and Styling

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

Basic Usage

Note that `getString` has an overload that uses the string as a format string:

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

Plurals

If you need to handle plurals, use this:

<plurals name="welcome_messages">
    <item quantity="one">Hello, %1$s! You have a new message.</item>
    <item quantity="other">Hello, %1$s! You have %2$d new messages.</item>
</plurals>

The first `mailCount` param is used to decide which format to use (single or plural), the other params are your substitutions:

Resources res = getResources();
String text = res.getQuantityString(R.plurals.welcome_messages, mailCount, username, mailCount);

See String Resources: Plurals for more details.

Problem

Is it possible to have placeholders in string values in `string.xml` that can be assigned values at run time? Example: some string PLACEHOLDER1 some more string

Original source

Related problems