在Android 5.0中更改应用程序语言不起作用

时间:2015-08-11 15:06:09

标签: android locale android-context

我使用下面的代码在点击按钮时更改我的应用语言(例如从法语更改为英语),它在Android 4.0 +上工作正常,但在5.0上它没有做到这一点。

Locale localeEn = new Locale("en_US");
Locale.setDefault(localeEn);
Configuration configEn = new Configuration();
configEn.locale = localeEn;
getApplicationContext().getResources().updateConfiguration(configEn, null);
this.recreate();

有什么线索可以吗?

编辑: 这是我的清单(使用android:configChanges)

<activity
            android:name=".activities.LoginActivity"
            android:configChanges="orientation|locale"
            android:label="@string/app_name"
            android:screenOrientation="portrait"/>

4 个答案:

答案 0 :(得分:10)

尝试改变:

Locale localeEn = new Locale("en_US");
Locale.setDefault(localeEn);

到这个

String language = "en";
String country = "US";
Locale locale = new Locale(language , country);

答案 1 :(得分:4)

我的解决方案,我来自Udhay,当用户更改操作栏中的语言和应用程序&#34;刷新&#34;选择语言。我使用的是android 6.0。

无需向androidManifest添加语言环境。

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    Locale locale = null;
    switch (item.getItemId()) {
        case R.id.action_en:
            locale = new Locale("en_US");
            Toast.makeText(this, "English", Toast.LENGTH_SHORT).show();
            break;
        case R.id.action_is:
            locale = new Locale("is", "IS");
                    Toast.makeText(this, "Íslanska", Toast.LENGTH_SHORT).show();
            break;

    }

    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = locale;
    res.updateConfiguration(conf, dm);
    Intent refresh = new Intent(this, MainActivity.class);
    startActivity(refresh);
    finish();
    return true;
}

答案 2 :(得分:1)

您是否在android:configChanges="locale"中添加了AndroidManifest.xml?我认为问题出在您的AndroidManifest.xml文件中。

您可以在my github repository.

上看到示例更改区域设置

答案 3 :(得分:1)

我的解决方案是在活动之前更改区域设置

setContentView(R.layout.layout_main);