WebView 嵌套滚动在 Android Jetpack Compose 中不起作用

Arn*_*old 8 android webview bottom-sheet android-jetpack-compose

WebView 不在 Compose 内滚动。我需要使用 Compose 将 WebView 放入 BottomSheet 中。即使我们使用NestedWebViewNestedScrollWebView , WebView 也不会滚动的问题。如果我将 WebView 放入 NestedScrollView 中,它仍然不会对滚动做出反应。

BottomSheetScaffold(
        sheetContent = {
            AndroidView(factory = {
                NestedWebView(it).apply {
                        layoutParams = ViewGroup.LayoutParams(
                            ViewGroup.LayoutParams.MATCH_PARENT,
                            ViewGroup.LayoutParams.MATCH_PARENT
                        )
                        settings.domStorageEnabled = true
                        settings.javaScriptEnabled = true
                        settings.useWideViewPort = true
                        webViewClient = WebViewClient()
                        //loadUrl("https://contest.rippl.club/")
                        loadUrl("https://codeflarelimited.com")
                    }
                })

        }) {
    }
Run Code Online (Sandbox Code Playgroud)

解决方法之一是使用 VerticalScroll 并将 webview 高度设置为 WRAP_CONTENT:

 val scrollState = rememberScrollState()
 AndroidView(modifier = Modifier.verticalScroll(scrollState), factory = {
            WebView(it).apply {
                     layoutParams = ViewGroup.LayoutParams(
                          ViewGroup.LayoutParams.MATCH_PARENT,
                          ViewGroup.LayoutParams.WRAP_CONTENT
                          ---//---
Run Code Online (Sandbox Code Playgroud)

但有很多网站无法使用wrap_content,例如因为像这个网站https://contest.rippl.club/这样的内部滚动。该网站不适用于该解决方法。如果我们将webview高度设置为屏幕高度,它仍然不起作用,因为verticalScroll就像ScrollView一样,所以它只会滚动到这个高度。

我还检查了此文档https://developer.android.com/jetpack/compose/gestures#parent-compose-child-view,但对于 webview 情况没有任何作用。

use*_*854 1

您需要使用一个NestedScrollConnection对象,并将其传递给外部视图上的nestedSCroll修饰符。这是一个基本示例