app内语言切换的一个工具类,很久之前在网上看到的,忘了是哪个的了,
记录一下。
public class LanguageUtil {
public static Context selectLanguage(Context context, String language) {
Context updateContext;
//设置语言类型
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
updateContext = createConfigurationResources(context, language);
} else {
applyLanguage(context, language);
updateContext = context;
}
//保存设置语言类型
ShareUtil.Companion.getInstance().save(Constant.LANGUAGE, language);
return updateContext;
}
private static Context createConfigurationResources(Context context, String language) {
//设置语言类型
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
Locale locale = null;
switch (language) {
case "en":
locale = Locale.ENGLISH;
break;
case "zh":
locale = Locale.SIMPLIFIED_CHINESE;
break;
default:
locale = Locale.getDefault();
break;
}
configuration.setLocale(locale);
return context.createConfigurationContext(configuration);
}
private static void applyLanguage(Context context, String language) {
//设置语言类型
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
Locale locale = null;
switch (language) {
case "en":
locale = Locale.ENGLISH;
break;
case "zh":
locale = Locale.SIMPLIFIED_CHINESE;
break;
default:
locale = Locale.getDefault();
break;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// apply locale
configuration.setLocale(locale);
} else {
// updateConfiguration
configuration.locale = locale;
DisplayMetrics dm = resources.getDisplayMetrics();
resources.updateConfiguration(configuration, dm);
}
}
public static Context updateLanguage(Context context) {
String curLanguage = ShareUtil.Companion.getInstance().getString(Constant.LANGUAGE, "zh");
if (TextUtils.isEmpty(curLanguage)) {
curLanguage = "zh";
}
return selectLanguage(context, curLanguage);
}
public static boolean switchLanguage(Context context, String value) {
String curLanguage = ShareUtil.Companion.getInstance().getString(Constant.LANGUAGE, "zh");
if (value.equals(curLanguage)) {
return false;
}
if (TextUtils.isEmpty(curLanguage)) {
ShareUtil.Companion.getInstance().save(Constant.LANGUAGE, "zh");
} else {
if (curLanguage.equals("en")) {
ShareUtil.Companion.getInstance().save(Constant.LANGUAGE, "zh");
} else {
ShareUtil.Companion.getInstance().save(Constant.LANGUAGE, "en");
}
}
selectLanguage(context, ShareUtil.Companion.getInstance().getString(Constant.LANGUAGE, "zh"));
return true;
}
}
使用:
viewBinding!!.rgLanguage.setOnCheckedChangeListener { group, checkedId ->
if (checkedId == R.id.rb_zh) {
switchLanguage(APP.context, "zh")
this.recreate()
} else {
switchLanguage(APP.context, "en")
this.recreate()
}
}
完毕。