Можно ли напрямую выполнить замену строк в XML файлах ресурсов Android?

В моем приложении для Android у меня есть большой XML файл с строковым ресурсом. Я хочу сделать ссылку и повторно использовать объявленные значения ресурсов в значениях String. Возможно ли присвоить значения класса R ссылочным значениям (a 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?

Ответы

Ответ 1

Добавьте% 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));

Ответ 2

Это действительно возможно.

<?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>

Вы даже можете определить свою сущность globaly, например:

Рез/сырой/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>

Ответ 3

Ну, я не думаю, что это возможно. Потому что, как только ресурсы выделены, андроид не позволит нам динамически изменять их в воздухе. Вместо этого вы можете попробовать использовать свои строки в отдельном классе и изменить их при прохождении кода.