我遇到有关更改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)
}
}
}
答案 0 :(得分:0)
这是AppCompat 1.1.0-alpha03
中的一个错误,最后通过最新的alpha AppCompat 1.1.0-alpha04
解决了。
我花了三天半的时间来了解由于许多重构导致的问题,然后才注意到这种行为。
这是在您early alpha tester
时发生的!
作为建议,因为这发生在我之前(不同的错误),所以请确保在继续改进和重构应用程序之前,先测试要更新到另一个Alpha时使用的所有功能。 :):)