我使用下面的代码在点击按钮时更改我的应用语言(例如从法语更改为英语),它在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"/>
答案 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
文件中。
答案 3 :(得分:1)
我的解决方案是在活动之前更改区域设置
setContentView(R.layout.layout_main);