【问题标题】:How can I concatenate static strings with XML string resources?如何将静态字符串与 XML 字符串资源连接起来?
【发布时间】:2011-11-20 18:07:35
【问题描述】:

我正在尝试将静态“硬编码”字符串与从 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/... 引用之前的数字,它工作得很好(如提到的 here),但我想知道是否有办法检索引用的字符串并将其连接到“硬编码”一个。

【问题讨论】:

标签: android xml reference preferences arrays


【解决方案1】:

抱歉,Android 资源文件不支持此类语法。

【讨论】:

  • 如果是这样的话,很遗憾,我猜我也得把数字移到strings.xml中了。
  • 使用 XML 实体可以在 Android xml 文件(如 strings.xml)中多次引用同一个字符串。请参阅下面的答案。
【解决方案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>

我使用了这个答案:dynamic String using String.xml?

【讨论】:

    【解决方案3】:

    有一种获得这种效果的方法,通过使用占位符定义字符串资源并在后面的代码中使用getResourses().getString()String.format() 样式重载:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-14
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      相关资源
      最近更新 更多