在我的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中完成吗?
答案 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>