2012-04-12 16 views
5

¿Es posible hacer referencia a una cadena en strings.xmlcadena de referencia en Android string.xml

Ej:

<string name="application_name">@string/first_name Browser</string> 
<string name="first_name">Chrome</string> 

Dónde dependiendo de los requerimientos, puedo cambiar el valor del nombre apellido a "Chrome" , "Firefox" u "Opera".

+0

posible duplicado de [¿Se puede combinar cadenas de recursos Android en nuevas cadenas?] (Http://stackoverflow.com/questions/3613722/can-one-combine-android -resource-strings-into-new-strings) –

+0

posible duplicado de [Referencia de una cadena de otra cadena en strings.xml?] (http://stackoverflow.com/questions/4746058/reference-one-string-from-another -string-in-strings-xml) – sschuberth

Respuesta

16

Se puede dar la referencia de recurso de cadena, pero la limitación son los siguientes

<string name="first_name">Chrome</string> 
<string name="application_name">@string/first_name</string> // gives "Chrome" 
<string name="application_name">Chrome @string/first_name</string> // gives "Chrome @string/first_name" 
<string name="application_name">@string/first_name Chrome </string> // gives error 

Si el contenido comienza con "@" y luego androide considera que esta es una cadena de referencia, ver último caso que da un error porque el Android de herramientas toman @ y la siguiente cadena como el nombre de referencia de la cadena, intentará encontrar un recurso llamado "@ string/first_name Chrome" que no existe.

Usted puede utilizar Cadena de Formato para asignar dinámicamente sub-secuencias como <string name="application_name">%1$s browser</string>

utilizar

String text = String.format(res.getString(R.string.application_name), "Chrome"); 
+0

Puede formatear la cadena usando - 'res.getString (R.string.application_name," Chrome ")' –

2

las cadenas en el strings.xml son fijos y no se pueden cambiar en tiempo de ejecución. Deberá definir una cadena para cada caso y hacer el cambio en el código.

String name; 

if (/* browser is Chrome*/) { 
    name = getString(R.string.first_name_chrome); 
} else if (/* browser is Firefox */) { 
    name = getString(R.string.first_name_firefox); 
} 

Sin embargo, puede hacer que la aplicación seleccione automáticamente la cadena correcta para los diferentes idiomas. Esto se puede hacer colocando archivos de cadena en carpetas localizadas (valores-en, valores-fr, valores-pl, etc.).

Puede leer más acerca de la localización en http://www.icanlocalize.com/site/tutorials/android-application-localization-tutorial/

+0

¿Es un error o es correcto para su uso el que usa "R. cadenas "en lugar de" R.string "? – RenniePet

Cuestiones relacionadas