3 回答
TA贡献1719条经验 获得超6个赞
您需要将新的配置上下文传递给 ContextWrapper 超类。
在您的活动中覆盖 attachBaseContext 并将新上下文传递为 -
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(updatedConfigurationContext(base));
}
并从 getApplicationContext().createConfigurationContext(configuration);
正如你在上面所做的那样。
TA贡献1877条经验 获得超1个赞
不知道你想在哪里做这个,所以我只是假设它在一个活动中。这个答案也在 Kotlin 中,如果你想在 Java 中使用它,请检查以下帖子: How to convert a kotlin source file to a java source file
活动:
override fun attachBaseContext(ctx: Context?) {
super.attachBaseContext(ContextWrapper.wrap(ctx, yourLocale))
}
上下文包装器:
class ContextWrapper(context: Context?) : android.content.ContextWrapper(context) {
companion object {
fun wrap(context: Context?, locale: Locale): ContextWrapper {
val configuration = context?.resources?.configuration
configuration?.setLocale(locale)
if (Build.VERSION.SDK_INT >= 24) {
val localeList = LocaleList(locale)
LocaleList.setDefault(localeList)
configuration?.locales = localeList
}
val ctx = if(configuration != null) context.createConfigurationContext(configuration) else null
return ContextWrapper(ctx)
}
}
}
重新创建您的上下文(活动):
recreate()在您的活动中使用以重新启动您的活动上下文。
添加回答
举报