无法更改Android 5.02的区域设置

时间:2015-03-16 11:56:59

标签: android localization locale android-5.0-lollipop

我在onCreate()的BaseActivity中使用我的所有项目中的默认代码:

Locale locale = new Locale("ru");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getApplicationContext().getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());

我尝试像new Locale("ru", "RU")一样放在这里 - 没有区别。这个问题只发生在android 5.02 NOT 5.0,5.01中的奇怪部分。还存在这样的problem所以我的假设是locale api的重大变化。

编辑:我在更改设置

中的区域设置后重新启动整个应用程序

1 个答案:

答案 0 :(得分:0)

你必须重新启动活动,但要注意这不会更新已经打开的活动(后备堆栈中的alreardy),我通常会更新然后调用主活动 清单中包含以下属性

<activity
        android:name=".activities.SplashActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop" #the important
        >

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

更新lang的小说

public static void updateLanguage(Context ctx, String lang, boolean goToHomeScreen) {
    Configuration cfg = new Configuration();
    if (!TextUtils.isEmpty(lang))
        cfg.locale = new Locale(lang);
    else
        cfg.locale = Locale.getDefault();

    ctx.getResources().updateConfiguration(cfg, null);

    if (goToHomeScreen) {
       Intent intent = new Intent(ctx, HomeActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
            | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    ctx.startActivity(intent);
    }
}