バイリンガル(英語/スペイン語)である必要があるAndroidアプリに取り組んでいます。ユーザーが設定から目的の言語を選択し、選択した言語に基づいてアプリのメインアクティビティ(TabActivityのサブクラス)で次のロケール変更を実行できるようにします。
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);
}
メインアクティビティは4つのタブをホストし、それぞれに独自のアクティビティ(場合によってはActivityGroup)があります。私がしたいのは、言語が変更されたときに、開いているすべてのアクティビティが再開されるだけで、文字列が適切な言語で再ロードされることです。また、受け入れ可能な(ただしあまり望ましくない)のは、開いているすべてのアクティビティを完全に破棄し、ユーザーがアプリを手動で再起動する必要があるため、すべての文字列が適切な言語で再読み込みされることです。
finish()
そのアクティビティを終了させるメインアクティビティから呼び出してみました。ただし、アプリを再起動すると、メインアクティビティによって「ホスト」されている子アクティビティ(タブごとに1つ)は引き続き前の言語で表示されます。これは、子供の活動が私にとって再帰的に「終了」しなかったためだと思います。
また、メインアクティビティと他のアクティビティでAndroidManifest.xmlから「locale」属性を含める/除外しようとしましたが、ローカルを変更してもアクティビティが再開することはありません。それでは、「再起動」はどのように現れますか?それはそれを呼ぶのでしょうか、onCreate()
それとも単にonResume()
、あるいは何か他のものでしょうか?このアプローチが自動的にアクティビティを再開しonCreate()
、ロケールが変更されたときに呼び出す場合、これを実現する方法に関する具体的なガイダンスが私の場合の最良のルートであるように思われます。
ソリューションはAndroidAPIレベル7で実行する必要があるためIntent
、フラグを使用して新しいものを作成することFLAG_ACTIVITY_CLEAR_TASK
は明らかに利用できないオプションです。