Я использую это расширение, чтобы изменить язык моего приложения:
fun Context.changeLanguage(language: String): ContextWrapper {
var context = this
val config = context.resources.configuration
if (language.isNotBlank()) {
val locale = Locale(language)
Locale.setDefault(locale)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.setLocale(locale)
} else {
config.locale = locale
}
context = context.createConfigurationContext(config)
}
return ContextWrapper(context)
}
MainActivity:
override fun attachBaseContext(newBase: Context?) {
super.attachBaseContext(newBase?.changeLanguage(prefs.language))
}
Это прекрасно работает для всего, кроме печати.Когда я пытаюсь распечатать, я получаю java.lang.IllegalStateException: Can print only from an activity
PrintFragment в другом модуле:
activity?.also { context ->
val printManager = context.getSystemService(Context.PRINT_SERVICE) as PrintManager
val jobName = getString(R.string.print_document)
printManager.print(jobName, PrintPdfAdapter(context, printList), null)
}
Есть идеи, как обойти эту проблему?
Я переключился обратно наcontext.resources.updateConfiguration(config, context.resources.displayMetrics)
на данный момент.Надеюсь, они не удалят его слишком рано.