使用新的支持库更改基于Locale的App语言

时间:2016-03-29 10:24:41

标签: android android-support-library

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

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'

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

我写了一个示例here来演示通过警报管理器重启应用程序的虚拟解决方案的问题,但我相信我可能做错了什么或者我错过了发布说明{{ 3}}

我搜索了很多,但我还没有发现任何关于这个问题的信息, 我在here

中提到了与资源相关的唯一新问题

关于新的机器人N,它说:

  

如果您是那些在您的应用中覆盖用户设备区域设置的开发人员之一...请在N上进行彻底测试。

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

1 个答案:

答案 0 :(得分:2)

下面的代码对我来说很好。 我在preferance中存储语言并使用以下代码我可以用多种语言制作应用程序。

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);