package com.driver.igotrip.utils; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.os.Build; import android.os.LocaleList; import android.text.TextUtils; import android.util.Log; import java.util.Locale; public class LanguageManager { /** * 为 Application/Activity 提供经过语言配置的 Context * 必须在 attachBaseContext 中调用 */ public static Context wrapContext(Context context) { String language = LanguageSP.getLanguage(context); Log.e( "语言: ",language ); // 否则根据保存的语言配置 Context return updateContextLocale(context, language); } /** * 更新 Context 的语言配置(适配全版本) */ private static Context updateContextLocale(Context context, String language) { Locale targetLocale = getLocaleFromLanguage(language); Configuration configuration = context.getResources().getConfiguration(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // 7.0+ 用 LocaleList 配置 configuration.setLocales(new LocaleList(targetLocale)); // 创建新的 Context(必须用 createConfigurationContext,否则不生效) return context.createConfigurationContext(configuration); } else { // 7.0 以下直接设置 locale configuration.locale = targetLocale; // 更新资源配置 context.getResources().updateConfiguration( configuration, context.getResources().getDisplayMetrics() ); return context; } } /** * 将语言字符串(如 "zh-CN")转换为 Locale 对象 */ private static Locale getLocaleFromLanguage(String language) { if (TextUtils.isEmpty(language)) { return Locale.getDefault(); } String[] parts = language.split("-"); if (parts.length == 1) { return new Locale(parts[0]); // 如 Const.Language.ENGLISH -> Locale(Const.Language.ENGLISH) } else { return new Locale(parts[0], parts[1]); // 如 "zh-CN" -> Locale("zh", "CN") } } /** * 切换语言并重启应用(确保所有页面生效) * @param context 上下文 * @param newLanguage 新语言(如 LanguageConst.ZH_CN) * @param launcherActivityClass 应用的启动页 Activity */ public static void switchLanguage(Context context, String newLanguage, Class launcherActivityClass) { // 保存新语言到 SP LanguageSP.saveLanguage(context, newLanguage); // 重启应用(清除旧栈,启动新栈) // restartApp(context, launcherActivityClass); } /** * 重启应用(无缝切换) */ private static void restartApp(Context context, Class launcherActivityClass) { Intent intent = new Intent(context, launcherActivityClass); // 清除所有旧 Activity,创建新任务栈 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(intent); // 关闭当前页面(如果是 Activity 调用) if (context instanceof Activity) { ((Activity) context).overridePendingTransition(0, 0); // 无动画,避免闪屏 ((Activity) context).finish(); } // 杀死旧进程(确保资源重新加载) android.os.Process.killProcess(android.os.Process.myPid()); } }