1. 示例图
2.具体实现
如何实现上述示例,且不需要重新打开App
①自定义 MainApplication 实现 Application ,定义两个变量:
class MainApplication : Application() { object GlobalDpData { var language: String = "" var defaultLanguage: String = "en" } override fun onCreate() { defaultLanguage = Locale.getDefault().language val cacheLanguage = "保存在手机App本地的切换后的语言,可用sp或文件实现" language = if (cacheLanguage.isNullOrEmpty()) { defaultLanguage } else { cacheLanguage } } }
②在baseActivity中添加语言实现
override fun attachBaseContext(baseContext: Context) { var language = MainApplication.GlobalDpData.language if (language.isEmpty()) { val default = MainApplication.GlobalDpData.defaultLanguage language = "保存在手机App本地的切换后的语言,可用sp或文件实现" } // 创建一个ContextWrapper对象 val context = newWrap(baseContext, language) // 将新的的Context设置给Activity super.attachBaseContext(context) }
/** * 创建ContextWrapper对象, */ private fun newWrap(context: Context, language: String): ContextWrapper { val configuration = context.resources.configuration configuration.fontScale = 1f val locale = Locale(language) val localeList = LocaleList(locale) LocaleList.setDefault(localeList) configuration.setLocales(localeList)