在 Jetpack Compose 中截取 Webview (AndroidView) 的屏幕截图
Taking screenshot of Webview (AndroidView) in Jetpack Compose
我打算用可组合项替换项目中的所有片段。剩下的唯一片段是其中带有 WebView
的片段。我需要一种方法来在用户单击报告按钮时获取它的屏幕截图
Box(Modifier.fillMaxSize()) {
Button(
onClick = this@ViewerFragment::onReportClick,
)
AndroidView(factory = { context ->
MyWebView(context).apply {
loadDataWithBaseURL(htmlString)
addJavascriptInterface(JavaScriptInterface(), "JsIf")
}
}
)
}
之前;我曾经将 webview
从 view binding
传递给实用函数以捕获屏幕截图。
fun onReportClick() {
val screenshot = ImageUtil(requireContext()).getScreenshot(binding.myWvViewer)
.
.
}
文档推荐“在 AndroidView viewBlock 中构造视图是最佳实践。不要持有或记住 AndroidView 之外的直接视图引用。”
那么最好的方法是什么?
查看 如何截取任何撰写视图的屏幕截图。
如果您需要截取完整网页视图(包括不可见部分)的屏幕截图,恐怕这是一种特殊情况,您必须存储在 remember
变量中并将其传递给您的处理程序:
var webView by remember { mutableStateOf<WebView?>(null) }
AndroidView(
factory = { context ->
WebView(context).apply {
// ...
webView = this
}
},
)
Button(onClick = {
onReportClick(webView!!)
}) {
Text("Capture")
}
我打算用可组合项替换项目中的所有片段。剩下的唯一片段是其中带有 WebView
的片段。我需要一种方法来在用户单击报告按钮时获取它的屏幕截图
Box(Modifier.fillMaxSize()) {
Button(
onClick = this@ViewerFragment::onReportClick,
)
AndroidView(factory = { context ->
MyWebView(context).apply {
loadDataWithBaseURL(htmlString)
addJavascriptInterface(JavaScriptInterface(), "JsIf")
}
}
)
}
之前;我曾经将 webview
从 view binding
传递给实用函数以捕获屏幕截图。
fun onReportClick() {
val screenshot = ImageUtil(requireContext()).getScreenshot(binding.myWvViewer)
.
.
}
文档推荐“在 AndroidView viewBlock 中构造视图是最佳实践。不要持有或记住 AndroidView 之外的直接视图引用。” 那么最好的方法是什么?
查看
如果您需要截取完整网页视图(包括不可见部分)的屏幕截图,恐怕这是一种特殊情况,您必须存储在 remember
变量中并将其传递给您的处理程序:
var webView by remember { mutableStateOf<WebView?>(null) }
AndroidView(
factory = { context ->
WebView(context).apply {
// ...
webView = this
}
},
)
Button(onClick = {
onReportClick(webView!!)
}) {
Text("Capture")
}