使用新的支持库基于Locale更改应用程序语言



我曾经更改应用程序中的语言通过执行以下操作:

Configuration cfg = new Configuration();
    if (!TextUtils.isEmpty(lang))
        cfg.locale = new Locale(lang);
    else
        cfg.locale = Locale.getDefault();
    Resources resources = ctx.getResources();
    resources.updateConfiguration(cfg, resources.getDisplayMetrics());

然后重新启动活动:

Intent intent = new Intent(context, HomeActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);

然而,在我从'com.android.support:appcompat-v7:23.1.1' 更改了支持库版本后,这种方式运行得很好

'com.android.support:appcompat-v7:23.2.1'

除非我杀死应用程序,否则资源不会改变

我在这里写了一个示例,演示了通过警报管理器重新启动应用程序的虚拟解决方案的问题,但我认为我可能做错了什么,或者我错过了发布说明中写的东西

我搜索了很多,但没有找到任何关于这个问题的信息,我发现的唯一一个与资源相关的新问题是在commonsware的博客中提到的

这是关于新的安卓N,正如它所说:

如果你是那些在你的应用程序中覆盖用户设备区域设置的开发人员之一…请彻底测试N。

然而,我的问题是棒棒糖、kitkat和果冻豆

下面的代码对我来说运行良好。我正在优先存储语言,并使用以下代码,我可以用多种语言制作应用程序。
Locale locale;
switch (userPreference.language)
    {
        default:
        case 0:
            locale = new Locale("de");
            languageCode = "de-de";
            break;
        case 1:
            locale = new Locale("en");
            languageCode = "en-en";
            break;
        case 2:
            locale = new Locale("fr");
            languageCode = "fr-fr";
            break;
        case 3:
            locale = new Locale("pl");
            languageCode = "pl-pl";
            break;
    }
    Configuration config = getResources().getConfiguration();
    Locale.setDefault(locale);
    config.locale = locale;
    getResources().updateConfiguration(config, getResources().getDisplayMetrics());

请看下面的代码我的活动

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    UserPreference userPreference = PreferenceHelper.getUserPreference(context);
    switch (userPreference.language)
    {
        case 0:
            GenericHelper.changeLanguage(context, "de");
            break;
        case 1:
            GenericHelper.changeLanguage(context, "en");
            break;
        case 2:
            GenericHelper.changeLanguage(context, "fr");
            break;
        case 3:
            GenericHelper.changeLanguage(context, "pl");
            break;
    }
    setContentView(R.layout.activity_get_signature);

最新更新