私のデバイスシステムは英語です。
AndroidManifest.xmlで、構成の変更を確認するアクティビティを定義しました。
<activity
...
android:configChanges="locale" >
私のアクティビティでは、関数を追加します:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Locale.setDefault(newConfig.locale);
Log.v("*Locale is*", newConfig.locale.toString());
getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
}
私のアクティビティ onResume()
では、上記の関数を呼び出しました。
@Override
public void onResume() {
super.onResume();
// I explicitely force my app to display in Finnish
Configuration newConfig = new Configuration();
newConfig.locale = new Locale("fi");
onConfigurationChanged(newConfig);
}
(私のアクティビティはフラグメントをホストします。各画面ビューはフラグメントです。)
上記のコードを使用すると、起動時にアプリがフィンランド語で表示されると思います。Android4.1.1では正常に動作します。
しかし、 Android 2.3.3デバイスでアプリを実行すると、次のことが起こります。
シナリオ1:デスクトップからアプリを起動する==>アプリはフィンランド語で表示されています、問題ありません
シナリオ2:アプリにログインし、==>アプリを閉じます==>次に、デスクトップからアプリを再起動します==>アプリは英語で表示されます!! なぜ???
(ログメッセージ には常にLog.v("*Locale is*", newConfig.locale.toString());
「fi」と表示されます!)
シナリオ2では、アプリをデスクトップから再度起動すると、アプリに常にシステムのデフォルトのロケールが表示されることを確認しました。なんで?
シナリオ2で、アプリがシステムロケールの英語で表示されている理由がわかりません。