Android 12与13应用内语言适配:getString返回不一致求兼容方案
兼容Android 12/13的应用内语言字符串获取方案
要统一在Android 12和13中获取应用内选中语言的字符串,核心是手动构建适配应用语言配置的Context,绕过系统默认Context的语言差异问题。
实现步骤
获取应用当前选中的语言配置
从存储用户语言选择的地方(比如SharedPreferences)取出语言代码,构建对应的Locale对象,再创建包含该Locale的Configuration。基于原Context创建适配语言的新Context
使用Context.createConfigurationContext()方法,传入我们构建的配置,得到一个强制使用应用内语言的Context。使用新Context获取字符串
用这个新Context调用getString(),就能在所有系统版本中得到应用内选中语言的字符串。
完整代码示例
// 假设你已经有获取用户选中语言的方法,比如从SharedPreferences读取 fun getSelectedLocale(): Locale { val savedLang = // 从存储中获取用户选择的语言代码,比如"zh-CN"、"en-US" return Locale.forLanguageTag(savedLang) } // 扩展函数:获取适配应用语言的Context fun Context.getAppLanguageContext(): Context { val selectedLocale = getSelectedLocale() val config = resources.configuration.apply { setLocale(selectedLocale) // 针对Android 17+,设置布局方向 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { setLayoutDirection(selectedLocale) } } return createConfigurationContext(config) } // 使用方式 val appLangContext = appContext.getAppLanguageContext() val targetString = appLangContext.getString(R.string.your_string_key)
关键说明
- Android 12及以下:系统默认Context的配置跟随系统语言,而我们创建的新Context强制使用应用内选中的Locale,因此能得到正确的应用语言字符串。
- Android 13及以上:该方法的行为和系统默认
getString()一致,但能保证在所有版本中逻辑统一,避免版本差异带来的问题。 - 注意要确保
getSelectedLocale()返回的是用户实际选中的语言,而不是系统语言,这样才能保证正确性。
内容的提问来源于stack exchange,提问作者Jithin Murali
相关产品推荐
相关产品推荐

