package cn.sinata.xldutils.utils; import android.annotation.TargetApi; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.os.LocaleList; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import java.util.Locale; import static android.content.ContentValues.TAG; public class LanguageUtil { public static Context attachBaseContext(Context context, String language, String country) { Log.d(TAG, "attachBaseContext: "+ Build.VERSION.SDK_INT); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return updateResources(context, language,country); } else { return context; } } @TargetApi(Build.VERSION_CODES.N) private static Context updateResources(Context context, String language, String country) { Resources resources = context.getResources(); Locale locale = new Locale(language,country); Configuration configuration = resources.getConfiguration(); configuration.setLocale(locale); configuration.setLocales(new LocaleList(locale)); return context.createConfigurationContext(configuration); } /** * @param context * @param newLanguage 想要切换的语言类型 比如 "en" ,"zh" */ @SuppressWarnings("deprecation") public static void changeAppLanguage(Context context, String newLanguage, String country) { if (TextUtils.isEmpty(newLanguage)) { return; } Resources resources = context.getResources(); Configuration configuration = resources.getConfiguration(); //获取想要切换的语言类型 Locale locale = new Locale(newLanguage,country); configuration.setLocale(locale); // updateConfiguration DisplayMetrics dm = resources.getDisplayMetrics(); resources.updateConfiguration(configuration, dm); } /** * 如果是7.0以下,我们需要调用changeAppLanguage方法, * 如果是7.0及以上系统,直接把我们想要切换的语言类型保存在SharedPreferences中,然后重新启动MainActivity即可 */ public static void setLanguage(String language,String country,Context appContext){ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { LanguageUtil.changeAppLanguage(appContext, language,country); } SPUtils.Companion.instance().put("language",language).put("country",country).apply(); } }