Android中config.locale已被废弃,该如何正确为Configuration设置Locale?
解决方案
config.locale 从API 17(Android 4.2)开始被官方标记废弃,需根据运行设备的API层级适配写法,修改完成后还要主动把配置更新到Context资源才能生效,完整示例代码如下:
val locale = Locale(country) Locale.setDefault(locale) val config: Configuration = baseContext.resources.configuration // 替换原废弃的赋值语句 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // API 24及以上优先调用setLocale,内部自动适配LocaleList机制 config.setLocale(locale) // 若有多个语言优先级需求,可改用以下写法: // config.setLocales(LocaleList(locale, 其他备选Locale)) } else { // 低版本用原有赋值逻辑,加注解忽略废弃警告即可 @Suppress("DEPRECATION") config.locale = locale } // 必须调用该方法将改动应用到资源配置,否则自定义Locale不会生效 baseContext.resources.updateConfiguration(config, baseContext.resources.displayMetrics)
补充说明
- API 24及以上系统引入了多语言优先级列表
LocaleList,如果只需要设置单一默认Locale,直接调用setLocale()即可,方法内部会自动把传入的Locale设为列表最高优先级项 - 如果是全局应用自定义Locale的场景,建议在Application的
onConfigurationChanged回调中同步执行一次Locale配置更新,避免系统配置变更(比如横竖屏切换、系统语言修改)后自定义配置被覆盖
内容的提问来源于stack exchange,提问作者sooyeon
相关产品推荐
相关产品推荐

