fun changeLang(context: Context, lang_code: String): ContextWrapper {
defaultLanguage = lang_code
var context = context
val sysLocale: Locale
val rs = context.resources
val config = rs.configuration
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
sysLocale = config.locales.get(0)
} else {
sysLocale = config.locale
}
if (lang_code != "" && !sysLocale.language.equals(lang_code)) {
val locale = Locale(lang_code)
Locale.setDefault(locale)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.setLocale(locale)
} else {
config.locale = locale
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
context = context.createConfigurationContext(config)
} else {
context.resources.updateConfiguration(config, context.resources.displayMetrics)
}
}
return ContextWrapper(context)
}
укажите это в каждом действии, для которого вы хотите изменить язык
override fun attachBaseContext(newBase: Context) {
val lang_code = Shared.defaultLanguage //load it from SharedPref
val context = Shared.changeLang(newBase, lang_code)
super.attachBaseContext(context)
}
вы можете попробовать этот код, он находится в Kotlin, и для получения дополнительной информации вы можете проверить Android N changeязык программно
я думаю, что это вопрос API.