9

在我的 android 应用程序中,我有一个大的字符串资源 xml 文件。我想在字符串值中引用和重用声明的资源值。是否可以让 R 类解析引用的值(例如 @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

4 回答 4

12

将 %s 添加到您希望对其进行修改的第二个资源字符串(您希望成为动态的那个)。IE,

<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));
于 2011-07-13T14:17:17.230 回答
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>

您甚至可以在全球范围内定义您的实体,例如:

资源/原始/实体.ent:

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

资源/值/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>
于 2017-09-02T19:40:13.177 回答
1

是的,通过使用我在构建时创建的这个小库,可以不编写任何 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>
于 2019-11-07T16:41:20.527 回答
0

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

于 2011-07-13T13:26:40.103 回答