是否可以直接在Android资源XML文件中进行字符串替换?

时间:2011-07-13 13:17:22

标签: android android-resources

在我的Android应用程序中,我有一个大字符串资源xml文件。我想在String值中引用并重用声明的资源值。是否可以让R类解析引用的值(la @ string / db_table_name)?

<resources>
<string name="db_table_name">tbl_name</string>
<string name="ddl">create table @string/tbl_name</string>
</resources>

有没有办法做到这一点。在常规Java世界中,一些工具使用$ {varname}表达式来解析引用。这可以在Android中完成吗?

4 个答案:

答案 0 :(得分:7)

将%s添加到您希望修改它的第二个资源字符串(您想要动态的字符串)中。即,

<resources>
<string name="db_table_name">tbl_name</string>
<string name="ddl">create table %s</string>
</resources>

并在你的代码中使用getString()来实现魔法,

getString(R.string.ddl, getString(R.string.db_table_name));

答案 1 :(得分:3)

确实可能。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
  <!ENTITY appname "MyAppName">
  <!ENTITY author "MrGreen">
]>

<resources>
    <string name="app_name">&appname;</string>
    <string name="description">The &appname; app was created by &author;</string>
</resources>

您甚至可以定义您的实体全球例如:

RES /原料/ entities.ent:

  <!ENTITY appname "MyAppName">
  <!ENTITY author "MrGreen">

RES /值/ string.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
    <!ENTITY % ents SYSTEM "./res/raw/entities.ent">
    %ents;   
]>

<resources>
    <string name="app_name">&appname;</string>
    <string name="description">The &appname; app was created by &author;</string>
</resources>

答案 2 :(得分:0)

嗯,我不认为这是可能的。因为一旦资源被分配,android将不允许我们在空中动态地更改它们。相反,您可以尝试将字符串放在单独的类中,并在运行代码时更改它们。

答案 3 :(得分:0)

是的,可以使用我创建的这个小型库在编写时不编写任何Java / Kotlin代码,而只编写XML:https://github.com/LikeTheSalad/android-string-reference

用法

根据您的示例,您必须像这样设置字符串:

<resources>
  <string name="db_table_name">tbl_name</string>
  <string name="template_ddl">create table ${db_table_name}</string>
</resources>

然后,在构建项目之后,您将获得:

<resources>
  <string name="ddl">create table tbl_name</string>
</resources>