Android-Locale Changer

时间:2019-04-04 17:35:52

标签: java android kotlin

我遇到有关更改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)
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这是AppCompat 1.1.0-alpha03中的一个错误,最后通过最新的alpha AppCompat 1.1.0-alpha04解决了。

我花了三天半的时间来了解由于许多重构导致的问题,然后才注意到这种行为。

这是在您early alpha tester时发生的!

作为建议,因为这发生在我之前(不同的错误),所以请确保在继续改进和重构应用程序之前,先测试要更新到另一个Alpha时使用的所有功能。 :):)