貌似7.1.1之后已经不支持在application里面统一配置语言了,所以在所有的activity里,最好是基类activity里重写attachBaseContext()方法,调用LanguageUtils.attachBaseContext(context,language)即可.
public class LanguageUtils {
public static Context attachBaseContext(Context context, String language) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return createConfigurationResources(context, language);
} else {
applyLanguage(context, language);
return context;
}
}
/**
* 7.1.1以下设置语言的方式
*
* @param context
* @param newLanguage
*/
public static void applyLanguage(Context context, String newLanguage) {
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
// Locale locale = SupportLanguageUtil.getSupportLanguage(newLanguage);
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// // apply locale
// configuration.setLocale(locale);
// } else {
// updateConfiguration
switch (newLanguage) {
case "en_US":
configuration.locale = Locale.ENGLISH;
break;
case "zh_CN":
configuration.locale = Locale.SIMPLIFIED_CHINESE;
break;
default:
configuration.locale = Locale.ENGLISH;
break;
}
DisplayMetrics dm = resources.getDisplayMetrics();
resources.updateConfiguration(configuration, dm);
// }
}
/**
* 7.1.1以上设置语言的方式
*
* @param context
* @param language
* @return
*/
@TargetApi(Build.VERSION_CODES.N)
private static Context createConfigurationResources(Context context, String language) {
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
// Locale locale;
// if (TextUtils.isEmpty(language)) {
// //如果没有指定语言使用系统首选语言
// locale = SupportLanguageUtil.getSystemPreferredLanguage();
// } else {
// //指定了语言使用指定语言,没有则使用首选语言
// locale = SupportLanguageUtil.getSupportLanguage(language);
// }
switch (language) {
case "en_US":
LogUtils.logI("LanguageUtils", "createConfigurationResources", "en_us");
configuration.setLocale(Locale.ENGLISH);
break;
case "zh_CN":
LogUtils.logI("LanguageUtils", "createConfigurationResources", "zh_cn");
configuration.setLocale(Locale.SIMPLIFIED_CHINESE);
break;
default:
configuration.setLocale(Locale.ENGLISH);
break;
}
return context.createConfigurationContext(configuration);
}
}
参考文章:
Android 国际化(多语言)兼容8.0