当我的设备语言不是英语(例如葡萄牙语)时,我无法更改语言。 这是我的代码:
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
我检查了其他类似这样的请求,但是它也不起作用
SharedPrefUtils.saveLocale(locale); // optional - Helper method to save the selected language to SharedPreferences in case you might need to attach to activity context (you will need to code this)
Resources resources = getResources();
Configuration configuration = resources.getConfiguration();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
configuration.setLocale(locale);
} else{
configuration.locale=locale;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
getApplicationContext().createConfigurationContext(configuration);
} else {
resources.updateConfiguration(configuration,displayMetrics);
}
那我怎么了?
答案 0 :(得分:0)
更改默认语言环境后,您可能需要重新创建活动。
getActivity().recreate();
答案 1 :(得分:0)
您需要将新的配置上下文传递给ContextWrapper超类。
在您的活动中覆盖attachBaseContext并将新的上下文传递为-
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(updatedConfigurationContext(base));
}
并从中返回新上下文
getApplicationContext().createConfigurationContext(configuration);
就像上面一样。
答案 2 :(得分:0)
不知道您想在哪里执行此操作,因此我只是假设它在活动中。同样,这个答案在Kotlin中,如果您想在Java中查看以下帖子: How to convert a kotlin source file to a java source file
活动:
override fun attachBaseContext(ctx: Context?) {
super.attachBaseContext(ContextWrapper.wrap(ctx, yourLocale))
}
ContextWrapper :
class ContextWrapper(context: Context?) : android.content.ContextWrapper(context) {
companion object {
fun wrap(context: Context?, locale: Locale): ContextWrapper {
val configuration = context?.resources?.configuration
configuration?.setLocale(locale)
if (Build.VERSION.SDK_INT >= 24) {
val localeList = LocaleList(locale)
LocaleList.setDefault(localeList)
configuration?.locales = localeList
}
val ctx = if(configuration != null) context.createConfigurationContext(configuration) else null
return ContextWrapper(ctx)
}
}
}
重新创建您的上下文(活动):
在活动中使用recreate()
重新启动活动上下文。