2012-04-12 11 views
5

E 'possibile fare riferimento a una stringa nel strings.xmlstringa di riferimento Android nel string.xml

Esempio:

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

Dove a seconda delle esigenze, è possibile passare il valore di first_name a "Chrome" , "Firefox" o "Opera".

+0

possibile duplicato di [Si può combinare stringhe di risorse Android in nuove stringhe?] (Http://stackoverflow.com/questions/3613722/can-one-combine-android -resource-stringhe-in-nuove-stringhe) –

+0

possibile duplicato di [riferimento una stringa da un'altra stringa in strings.xml?] (http://stackoverflow.com/questions/4746058/reference-one-string-from-another -string-in-stringhe-xml) – sschuberth

risposta

16

Si può dare il riferimento di risorsa di tipo stringa, ma la limitazione sono i seguenti

<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 

Se il contenuto inizia con "@", quindi Android considera questa è una stringa di riferimento, vedi ultimo caso che dà un errore perché Android strumenti prendono @ e la stringa successiva ad esso come nome di riferimento della stringa, cercherà di trovare una risorsa chiamata "@ string/first_name Chrome" che non esiste.

È possibile utilizzare formato stringa per assegnare dinamicamente sotto-stringhe come <string name="application_name">%1$s browser</string>

utilizzare

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

È possibile formattare la stringa utilizzando - 'res.getString (R.string.application_name," Chrome ")' –

2

le stringhe nel strings.xml sono fissi e non può essere modificata in fase di esecuzione. Dovrai definire una stringa per ogni caso e fare lo switch nel codice.

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); 
} 

È tuttavia possibile fare in modo che l'applicazione selezioni automaticamente la stringa corretta per lingue diverse. Questo può essere fatto posizionando i file di stringa in cartelle localizzate (valori-en, valori-fr, valori-pl ecc.).

Si può leggere di più sulla localizzazione a http://www.icanlocalize.com/site/tutorials/android-application-localization-tutorial/

+0

Si tratta di un errore o è corretto per l'utilizzo che si utilizza "R. stringhe "invece di" R.string "? – RenniePet

Problemi correlati