开发项目的时候没遇到国际化需求,往往会有需要用户单独设置APP语言的需求,并不跟随系统语言。
特此记录一下
在系统为7.0之前,直接改变Configuration的local属性就可以做到语言切换,7.0以后需要在页面的attachBaseContext方法做createConfigurationContext处理。
public static Context attachBaseContext(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//7.0及以后
return updateResources(context);
} else {
//7.0之前
Configuration configuration = context.getResources().getConfiguration();
configuration.locale = Locale.ENGLISH;
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
context.getResources().updateConfiguration(configuration, displayMetrics);
return context;
}
}
@TargetApi(Build.VERSION_CODES.N)
private static Context updateResources(Context context) {
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
configuration.locale = Locale.ENGLISH;
return context.createConfigurationContext(configuration);
}
7.0之后一定要重写Activity的attachBaseContext
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LocalUtils.attachBaseContext(newBase));
}