在Jetpack Compose中截取Webview (AndroidView)



我计划用可组合物替换我项目中的所有片段。唯一剩下的片段是含有WebView的片段。我需要一种方法来获得它的截图每当用户点击报告按钮


Box(Modifier.fillMaxSize()) {
Button(
onClick = this@ViewerFragment::onReportClick,
)
AndroidView(factory = { context ->
MyWebView(context).apply {
loadDataWithBaseURL(htmlString)

addJavascriptInterface(JavaScriptInterface(), "JsIf")
}
}
)
}

之前;我曾经将webviewview binding传递到一个实用程序函数,用于捕获屏幕截图。

fun onReportClick() {
val screenshot = ImageUtil(requireContext()).getScreenshot(binding.myWvViewer)
.
.
}

文档推荐"在AndroidView viewBlock中构造视图是最佳实践。不要持有或记住AndroidView外部的直接视图引用。那么什么是最好的方法呢?

查看如何截取任何撰写视图的截图。

如果您需要截取完整的web视图(包括不可见的部分)的屏幕截图,恐怕这是一个例外情况,当您必须存储在remember变量并将其传递到您的处理程序:

var webView by remember { mutableStateOf<WebView?>(null) }
AndroidView(
factory = { context ->
WebView(context).apply {
// ...
webView = this
}
},
)
Button(onClick = {
onReportClick(webView!!)
}) {
Text("Capture")
}

最新更新