10

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.

2

3 Answers 3

6

Sorry, no such syntax is supported by Android resource files.

Sign up to request clarification or add additional context in comments.

2 Comments

if it's so, it's sad, guess I'll have to move the digits to strings.xml as well.
Using XML entities it is possible to reference the same string multiple times in an Android xml file like strings.xml. See my answer below.
1

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?

Comments

-1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.