Как я могу конкатенировать статические строки с XML-строковыми ресурсами?

Я пытаюсь объединить статическую "жестко закодированную" строку с одной ссылкой из strings.xml для элементов строкового массива.

Цель состоит в том, чтобы иметь список динамических показателей, где число одинаково для всех языков, но значение текста метрики может изменяться по языку, примерно так:

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

Прямо сейчас, если я удалю номера перед ссылками @string/..., он работает хорошо (как упоминалось здесь), но мне было интересно, есть ли способ для извлечения ссылочной строки и объединения ее в "жестко закодированную".

Ответ 1

К сожалению, такой синтаксис не поддерживается файлами ресурсов Android.

Ответ 2

Использование XML-объектов возможно.

<?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>

Я использовал этот ответ: динамическая строка с использованием String.xml?

Ответ 3

Существует способ получения этого эффекта путем определения ресурса строки с помощью владельца места и использования String.format() перегрузки стиля getResourses().getString() в коде позади:

В string.xml

<string name="secs">%1$d seconds</string>

В activity_layout.xml

<TextView android:id="@+id/secs_label" />

В TheActivity.java

((TextView)findViewByID(R.id.secs_label)).setText(getResources().getString(R.string.secs, 25));