Android の実行時に言語を変更する必要があります (はい、これは適切な動作ではないことはわかっていますが、これは要件です...)。
したがって、すべてのアクティビティが拡張される基本クラスがあります。このクラスには次の機能があります。
public static void changeLanguage(Context context) {
Resources res = context.getResources();
/*
* Change locale settings in the app.
*/
DisplayMetrics dm = res.getDisplayMetrics();
/*
* Store and load data in this preferences
*/
android.content.res.Configuration conf = res.getConfiguration();
String[] localArray = res.getStringArray(R.array.language_short_array);
if (localArray != null) {
SharedPreferences settings = context.getSharedPreferences(
MyService.APP_ID, MODE_PRIVATE);
conf.locale = new Locale(localArray[settings.getInt(
PREFERED_LANGUAGE_KEY, 0)]);
res.updateConfiguration(conf, dm);
}
}
onCreate でこのメソッドを呼び出します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
changeLanguage(this);
}
これはスーパークラスです。私のアクティビティはそれから拡張され、最初に super.onCreate を呼び出します。この呼び出しの後、レイアウトを設定し、設定を初期化します...
私のコード行でうまくいくと思いました。しかし、次の問題があります。活動によって言語が変わる場合と変わらない場合があります。
それにデバッグブレークポイントを設定し、プログラムが一時停止した後に続行を押すと、すべて正常に動作します。したがって、場合によっては、アプリケーションが「十分に遅い」場合、言語は正しく変更されますが、アプリケーションが速すぎると言語は変更されません...
私の問題の解決策はありますか?私の言語がいつでも正しく変更されることをどのように確認できますか?
どうもありがとう!
編集:これは私のスーパークラスから拡張されたクラスの例です
public class MainMenuActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
}
}