Home » Android » Android variables in strings.xml

Android variables in strings.xml

Posted by: admin June 15, 2020 Leave a comment


Somewhere I read how to use variables in XML document. They said it’s very simple and I guess it was. I successfully used it that way in Android strings.xml file. I was using it that way the whole day until suddenly android stopped to parse it and stopped to treat it like a variable.

I used it in this way:

<string name="some_string">string1</string>
<string name="another_string"> {$some_string} trolololo </string>

and in java accessing it through: getApplicationContext().getString(R.strings.another_string);


In the output I used to receive string like:

string1 trolololo

and now I receive only:

{$some_string} trolololo

Does anyone have any idea what is wrong? I know that Android’s XML may differ than standard XML, but IT USED TO WORK. Awww… Thanks for any advice.

How to&Answers:

This will solve your problem:

    <string name="some_string">string1</string>
    <string name="another_string">@string/some_string trolololo</string>

Now the output of the getApplicationContext().getString(R.strings.another_string) will be string1 trolololo.


Assuming that you want to pass a string value as a parameter in the another_string then your string is not well formatted to receive that argument and if you try to use it your output will be {$some_string} trolololo.

If you need to format your strings using String.format(String,
, then you can do so by putting your format arguments in the
string resource.

<string name="some_string">string1</string>
<string name="another_string">%1$s trolololo</string>

Now your able to format the string with arguments from your application like this:

String arg = "It works!";
String testString = String.format(getResources().getString(R.string.another_string), arg);
Log.i("ARG", "another_string = " + testString);

Doing so the output string will be another_string = It works! trolololo.

Take a look at the Android Developers official documentation, here.


Or, you can directly use getResources().getString(R.string.activity_title, arg).

For example

   <string name="postfix_title">%s Gallery</string>

and then simply,

String arg = "Colors";
String title = getResources().getString(R.string.postfix_title, arg);

This will result in title containing value Colors Gallery.


I’m not sure how the first initial thing you’ve done was working with the curly brackets but i’ve run into this issue before and couldn’t find a solution..

Now what I do is calling those strings separately and concatenate them during runtime.