The default Locale needs to be set & then resources need to be updated for recreating the view. Additionally, for build version lower than Android N, you need to update the configuration of the resources too, like the following:
val locale = Locale(language)
Locale.setDefault(locale)
val resources = context.resources
val configuration = resources.configuration
configuration.locale = locale
configuration.setLayoutDirection(locale)
resources.updateConfiguration(configuration, resources.displayMetrics)
Here's a demo working version with one button to save the language in shared preference (as the given code snippet does) and recreate with the updated Local. Feel free to use the LocaleHelper utility class and call it like showed in its MainActivity, if it helps:
LocaleHelper().setLocale(this@MainActivity, "en")
recreate()
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…