2011-07-13 14 views
6

En mi aplicación de Android, tengo un gran archivo xml de recurso de cadena. Quiero hacer referencia y reutilizar valores de recursos declarados dentro de valores de cadena. ¿Es posible hacer que la clase R resuelva los valores referenciados (a la @ string/db_table_name)?¿Es posible hacer la sustitución de cadenas en archivos XML de recursos de Android directamente?

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

¿Hay alguna forma de hacerlo? En el mundo Java normal, algunas herramientas usan la expresión $ {varname} para resolver la referencia. ¿Se puede hacer esto en Android?

+1

se probablemente no necesites tus nombres db y creación de consultas en recursos xml y no dependerán de la localización ni de los calificadores de dispositivos. Yo votaría por h creando estas cosas en un archivo de configuración de proyecto global y quizás una clase estática para la creación de consultas, ¡solo una idea! No soy consciente de que lo anterior es posible son los archivos de resolución :) – Dori

Respuesta

0

Bueno, no creo que esto sea posible. Porque una vez que se asignan los recursos, android no nos permitirá cambiarlos dinámicamente en el aire. En cambio, puedes intentar tener tus cadenas en una clase separada y cambiarlas a medida que corres a través de tu código.

+1

No estoy interesado en cambiar la cadena en tiempo de ejecución, sino que la generación de código de Android que crea la clase R.java me sustituye en el momento del diseño. Aparentemente no es posible. –

7

Agregue a% s a su segunda cadena de recursos (la que desea ser dinámica) donde desea que se modifique. es decir,

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

y en su getString uso de código() para trabajar la magia,

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

Soy consciente de este enfoque. Me preguntaba si las herramientas de Android harían esto cuando se genere R.java. Usar la respuesta propuesta todavía requiere que haga todo el trabajo. –

1

Es de hecho posible.

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

Incluso puede definir su entidad globaly por ejemplo:

res/prima/entities.ent:

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

res/valores/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> 
Cuestiones relacionadas