アプリケーションでロケールをその場で変更するプロジェクトに取り組んでいます。メイン UI は res/layout/main.xml で作成されました。これが私のコードです:
OnCreate()
{
... ...
Configuration config = getBaseContext().getResources().getConfiguration();
config.locale = Locale.FRANCE; // set locale to french
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
setContentView(R.layout.main);
}
結果: main.xml の android:text="@string/myString" は、私が期待した res/values-fr/strings.xml で myString を使用しています。
ロケールがイタリア語に変更される別の関数:
{ ... ...
Configuration config = getBaseContext().getResources().getConfiguration();
config.locale = Locale.ITALY; // change locale to Italian
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
その関数が呼び出された後、 getString(R.string.myString) は res/values-it/strings.xml で myString を使用しています。これは私が期待したものです。ただし、メインの UI は変更されません。main.xml の android:text="@string/myString" は、アクティビティを強制的に再起動するまで、res/values-fr/strings.xml の myString を引き続き使用しています。
{
Intent intent = getIntent();
finish();
startActivity(intent);
}
view.invalidate() と layoutInflater.inflate(R.layout.main, this) を呼び出そうとしましたが、どれも機能しません。どんなアイデア/提案も大歓迎です。