在 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")
        }
    }
    )
}

之前;我曾经将 webviewview 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")
}