【发布时间】:2019-04-04 17:35:52
【问题描述】:
我在更改 Locale 时遇到了奇怪的行为。每个Android API levels 都运行良好。
试图更改我的应用程序的Locale,但它不再工作了。
设置新的Locale -> AttachBaseContext -> Recreate Activity 时似乎一切正常,但最后我只看到来自English 的字符串。
你有什么建议,或者最新的Android Studio 3.5 Canary 9可能有问题?
这是我的自定义上下文包装器:
class MyContextWrapper(base: Context) : ContextWrapper(base) {
companion object {
@TargetApi(Build.VERSION_CODES.N)
fun wrap(contextt: Context, newLocale: Locale): ContextWrapper {
var context = contextt
val res = context.resources
val configuration = res.configuration
when {
VersionUtils.isAfter24 -> {
configuration.setLocale(newLocale)
val localeList = LocaleList(newLocale)
LocaleList.setDefault(localeList)
configuration.locales = localeList
context = context.createConfigurationContext(configuration)
}
VersionUtils.isAfter17 -> {
configuration.setLocale(newLocale)
context = context.createConfigurationContext(configuration)
}
else -> {
@Suppress("DEPRECATION")
configuration.locale = newLocale
@Suppress("DEPRECATION")
res.updateConfiguration(configuration, res.displayMetrics)
}
}
return ContextWrapper(context)
}
}
}
【问题讨论】:
-
这是 Androidx 1.1.0 上报告的错误,在此处找到解决方案:issuetracker.google.com/issues/140988416#comment6