2016-07-01 19 views
2

Kann ich den gesamten Text in meiner App in einen anderen Text ändern, wenn ich auf eine Schaltfläche klicke oder einen Menüeintrag wähle?Wie ändere ich den Text aller meiner Aktivitäten (Schaltflächentext, Textansichten usw.) mit einem Klick-Event?

Was ich eigentlich versuche zu tun ist, meine App in ein paar Nicht-ISO-Sprachen zu übersetzen ("non-iso" bedeutet, dass ich sie nicht in der Liste ISO-639 des Wikis finden konnte).

Also ich möchte der Benutzer in der Lage sein, die Sprache auszuwählen, in der sie meine App anzeigen, unabhängig davon, was ihre Telefonspracheneinstellungen möglicherweise sind. Und ich möchte, dass sie die Sprachauswahl aus der App heraus treffen können.

Ich habe alle englischen Button und Textansicht Text in strings.xml, und ich kann eine Strings-xx.xml für die neuen Sprachen.

Ich werde ein Untermenü mit den aufgeführten Sprachoptionen verwenden. Die Textänderung wird also auf ein Onclick-Ereignis in diesem Menü reagieren. Alle Hinweise sind sehr willkommen.

+1

relevante Informationen hier: http://stackoverflow.com/questions/2900023/change-language-programmatically-in- android –

Antwort

2

von Genommen: How to change language of app when user selects language?

public void setLocale(String lang) { 
    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, YOURACTIVITY.class); 
    startActivity(refresh); 
    finish(); 
} 

Sie cann jede gültige Sprache Zeichenfolge an die setLocale-Methode übergeben, wie „de“ oder „es“, aber Sie haben die Aktivität neu zu starten.

Ich weiß nicht, wie sich Ihre App verhalten wird, wenn Sie die Zurück-Taste drücken. Wenn es Ihre "alte" Activity beginnt versuchen diese, während der Aktivität neu zu starten:

public void setLocale(String lang) { 
    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, YOURACTIVITY.class); 
    refresh.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    startActivity(refresh); 

}

+0

vielen dank für ihre antwort. Entschuldigung für meine verspätete Antwort. Ein sehr lieber Geliebter ist verstorben. Ok, ich habe Ihre Lösung angewendet und es funktioniert gut. Ich habe auch eine loadLocale() -Methode, die ich in meiner Launcher-Aktivität onCreate aufrufen. Das einzige Problem, das ich habe, ist, dass wenn ich die App schließe und sie wieder öffne, bekomme ich einen leeren Bildschirm. Ich habe festgestellt, dass, wenn ich die loadLocale-Methode auskommentiere, die App normal geladen wird, die Gebietsschemata sich ändern, aber die Gebietsschemaeinstellungen nicht gespeichert werden. Unten ist die loadLocale() -Methode. changeLanguage() in der letzten Zeile ist wie Ihre setLocale() -Methode oben. – GeorgeF

+0

'public void loadLocale() { String langPref =" Sprache "; SharedPreferences prefs = getSharedPreferences ("com.georgey.multilanguageapp.PREFERENCES", Context.MODE_PRIVATE); Zeichenfolgensprache = prefs.getString (langPref, ""); changeLanguage (Sprache); } ' – GeorgeF