Grazie della risposta.
Sto provando ma non riesco a farlo funzionare.
Nell'app c'è un BaseFragment in cui viene definito un metodo initResources() che viene richiamato in tutti i Fragment.
La funzione del cambio risorse è questa:
codice:
fun setLocaleLanguage(context: Context, language: String): Configuration? {
val locale = Locale(language.lowercase())
Locale.setDefault(locale)
val res: Resources = context.getResources()
val dm: DisplayMetrics = res.getDisplayMetrics()
val conf: Configuration = res.getConfiguration()
conf.setLocale(locale) // API 17+ only.
res.updateConfiguration(conf, dm)
return conf
}
Nel BaseFragment ho impostato il seguente codice:
codice:
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
}
protected open fun initResources() {
DeviceInfo.userLanguage?.run {
MyLog.d(reqTag, "$reqTag: Aggiorno la lingua con quella settata dall'utente $this")
val newConfig = LocaleHelper.setLocaleLanguage(requireActivity().applicationContext, this)
newConfig?.run {
onConfigurationChanged(this)
}
}
}
E nel Fragment derivato da BaseFragment
codice:
override fun initResources() {
reqTag = "UserAccess"
super.initResources()
//text
binding.title.text = getString(R.string.ua_title)
binding.description.text = getString(R.string.ua_description)
}
dove title e description sono delle TextView presenti nel layout del Fragment.
Nel blocco di codice del cambio lingua entra (super.initResources()) ma la lingua non viene cambiata