android - PrintManager.print() 并更改了 attachBaseContext 中的语言环境
问题描述
我使用此扩展程序来更改我的应用程序的语言环境:
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)
}
主要活动:
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)
。希望他们不要过早删除它。
解决方案
您可以将原始上下文保存fun attachBaseContext(newBase: Context?)
到某个MainActivity
变量,然后在您PrintFragment
使用此变量进行打印。
推荐阅读
- ionic-framework - 如何在 Ionic 2/3 中将大型 Base64 数据发送到 NavController?
- python - 如何知道 Tensorflow Slim 图像模型的每一层的名称?
- android - 两根手指向下如何禁用动作移动
- android - XMPPError:需要注册 - 身份验证
- c# - DataGrid SelectedItem 到 TextBox
- python - Tensorflow 在训练时两次打印相同的信息
- regex - 通过使用 to_number 转换它来搜索范围内有空格的 varchar
- json - 无法在 groovy json 上对对象进行排序
- firebase - 检查用户是否登录 Flutter & firebase auth |
- gis - 字符串值列的QGIS颜色排序