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

vla*_*ien 9 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>
Run Code Online (Sandbox Code Playgroud)

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

sou*_*rar 9

将%s添加到您想要修改它的第二个资源字符串(您想要动态的那个).即

<resources>
<string name="db_table_name">tbl_name</string>
<string name="ddl">create table %s</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

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

getString(R.string.ddl, getString(R.string.db_table_name));
Run Code Online (Sandbox Code Playgroud)


Jos*_*one 5

确实有可能。

<?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>
Run Code Online (Sandbox Code Playgroud)

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

res/raw/entities.ent:

  <!ENTITY appname "MyAppName">
  <!ENTITY author "MrGreen">
Run Code Online (Sandbox Code Playgroud)

资源/值/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>
Run Code Online (Sandbox Code Playgroud)

  • 我得到:错误:引用了实体“appname”,但未声明。我确实像这个例子一样,但可以让它工作...... (2认同)

And*_*lva 0

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