Ich arbeite an einer Android-App, die zweisprachig sein muss (Englisch/Spanisch). Ich erlaube dem Benutzer, die gewünschte Sprache aus einer Einstellung auszuwählen und die folgende Gebietsschemaänderung in der Hauptaktivität der App (einer Unterklasse von TabActivity) basierend auf der ausgewählten Sprache durchzuführen:
private void setApplicationLanguage(String languageCode)
{
// Set the locale to the specified language code.
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale(languageCode.toLowerCase());
res.updateConfiguration(conf, dm);
}
Die Hauptaktivität enthält vier Registerkarten, jede mit einer eigenen Aktivität (manchmal ActivityGroup). Was ich gerne hätte, ist, wenn sich die Sprache ändert, alle Offene Aktivitäten werden einfach neu gestartet, wodurch ihre Zeichenketten in der entsprechenden Sprache neu geladen werden. Ebenfalls akzeptabel (aber weniger wünschenswert) wäre die vollständige Zerstörung aller geöffneten Aktivitäten, so dass der Benutzer die Anwendung manuell neu starten müsste und somit alle Zeichenfolgen in der entsprechenden Sprache neu geladen würden.
Ich habe versucht anzurufen finish()
von der Haupttätigkeit, was dazu führt, dass diese Tätigkeit beendet wird. Wenn ich jedoch die Anwendung neu starte, erscheinen die untergeordneten Aktivitäten, die von der Hauptaktivität "gehostet" werden (eine für jede Registerkarte), weiterhin in der vorherigen Sprache. Ich nehme an, dass dies darauf zurückzuführen ist, dass die untergeordneten Aktivitäten nicht rekursiv für mich "beendet" wurden.
Ich habe auch versucht, das "locale"-Attribut aus AndroidManifest.xml in der Hauptaktivität sowie in anderen Aktivitäten ein- und auszuschließen, aber ich sehe nie, dass eine Aktivität bei einer Änderung der Locale neu startet. Andererseits, wie würde sich der "Neustart" manifestieren? Würde er Folgendes aufrufen onCreate()
oder einfach onResume()
oder sogar etwas anderes? Wenn dieser Ansatz die Aktivitäten automatisch neu starten würde, würde der Aufruf onCreate()
wenn sich das Gebietsschema ändert, dann wäre es in meinem Fall wohl am besten, wenn ich eine genaue Anleitung bekäme, wie ich dies erreichen kann.
Die Lösung muss auf Android API Level 7 laufen, also muss eine neue Intent
mit der Flagge FLAG_ACTIVITY_CLEAR_TASK
ist anscheinend keine Option verfügbar.