在Android中更改区域设置后重新加载所有资源

时间:2014-02-22 22:22:00

标签: android localization locale

我有preferenceFragment PreferenceList,其中用户为应用用户界面选择新语言。
我希望刷新所有资源并使用新语言重新加载。 (就好像使用新选择的语言重新启动应用程序一样) 正如我所读到的那样,默认情况下configurationChanged应重新启动Activity或正在运行的任何内容,但似乎不会发生。 (我在包含Toast的活动的onCreate中添加了preferenceFragment,并且在配置更改时不会调用它。
以下是preferenceFragment

中语言变更的处理方法
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if (getString(R.string.shared_options_select_language_key).equals(key)) {
        Toolkit.setApplicationLanguage(getActivity(), getActivity().getBaseContext());
    }

以下是setApplicationLanguage()的代码:

public static void setApplicationLanguage(Context ctx, Context baseCtx) {

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx);

    String langKey = ctx.getString(R.string.shared_options_select_language_key);
    String langDefault = ctx.getString(R.string.shared_options_select_language_default_value);
    String appLanguage = preferences.getString(langKey, langDefault);

    Locale locale = null;
    if (appLanguage.equals(langDefault)) {                
    locale = new Locale(Resources.getSystem().getConfiguration().locale.getLanguage());
    } else {
        String[] languageInfo = appLanguage.split("_");
        if (languageInfo.length > 1) {
            locale = new Locale(languageInfo[0], languageInfo[1]);
        } else {
            locale = new Locale(appLanguage);
        }
    }
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;

    baseCtx.getResources().updateConfiguration(config, baseCtx.getResources().getDisplayMetrics());
}

0 个答案:

没有答案