我使用此代码在多种语言app中手动设置默认语言:
public static void setLanguage(Context context, String languageCode){
Locale locale = new Locale(languageCode);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale; // Deprecated !!
context.getApplicationContext().getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
}
所以现在我们不能通过config.locale设置语言环境,因为该变量将在API 24中被删除。
所以我看到另一种方法是设置:
config.setLocales();
区域设置
在API级别1中添加
区域设置区域设置
此字段在API中已弃用 24.请勿直接设置或阅读此内容。使用getLocales()和 setLocales(LocaleList)。如果只需要主要区域设置, getLocales()。get(0)现在是首选访问器。
区域设置的当前用户首选项,对应于区域设置 资源限定符。
我还注意到setLocale(Locale)
也是如此,但对于api 17及以上
我检查了setLocales(LocalList)文档,它以灰色标记,好像它也被弃用了!
所以可以解决这个问题!?
答案 0 :(得分:28)
希望这有帮助,我还添加了吸气剂。
@SuppressWarnings("deprecation")
public Locale getSystemLocaleLegacy(Configuration config){
return config.locale;
}
@TargetApi(Build.VERSION_CODES.N)
public Locale getSystemLocale(Configuration config){
return config.getLocales().get(0);
}
@SuppressWarnings("deprecation")
public void setSystemLocaleLegacy(Configuration config, Locale locale){
config.locale = locale;
}
@TargetApi(Build.VERSION_CODES.N)
public void setSystemLocale(Configuration config, Locale locale){
config.setLocale(locale);
}
public static void setLanguage(Context context, String languageCode){
Locale locale = new Locale(languageCode);
Locale.setDefault(locale);
Configuration config = new Configuration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
setSystemLocale(config, locale);
}else{
setSystemLocaleLegacy(config, locale);
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)
context.getApplicationContext().getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
}
由于现在不推荐使用context.getApplicationContext()。getResources()。updateConfiguration(),我强烈建议您查看this solution并采用不同的方法来覆盖Android系统配置。