I'm trying to combine a static "hard coded" string with one referenced from strings.xml
for string array items.
The goal is to have a dynamic metrics list where the number is the same for all languages, but the metrics text value may change by language, something like this:
<string-array name="interval_labels">
<item>30 @string/second</item>
<item>1 @string/minute</item>
<item>5 @string/minute</item>
<item>10 @string/minute</item>
<item>15 @string/minute</item>
<item>30 @string/minute</item>
<item>60 @string/minute</item>
</string-array>
Right now, if I remove the numbers before the @string/...
references, it works well (as mentioned here), but I was wondering whether there is a way to retrieve the referenced string and concatenate it to the "hard coded" one.
Sorry, no such syntax is supported by Android resource files.
Using XML entities it's possible.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY mintues "minutes">
<!ENTITY minute "minute">
<!ENTITY seconds "seconds">
]>
<resources>
<string-array name="interval_labels">
<item>30 &seconds;</item>
<item>1 &minute;/item>
<item>5 &minutes;</item>
<item>10 &minutes;</item>
<item>15 &minutes;</item>
<item>30 &minutes;</item>
<item>60 &minutes;</item>
</string-array>
</resources>
I used this answer: dynamic String using String.xml?
There is a way of sort-of getting this effect, by defining the string resource with a place holder and using String.format()
style overload of getResourses().getString()
in the code behind:
In string.xml
<string name="secs">%1$d seconds</string>
In activity_layout.xml
<TextView android:id="@+id/secs_label" />
In TheActivity.java
((TextView)findViewByID(R.id.secs_label)).setText(getResources().getString(R.string.secs, 25));