我想用Jetpack创建一个dinamic标题,当用户在主屏幕内容部分滚动时,该标题应调整大小.动态标题工作正常,但我对WebView有一些问题:在渲染WebView时,使用" compose ",它将被拉伸,并且向用户显示的任何弹出窗口都将脱离主视口.

这是一个使用旧式XML布局的实现:

Xml layout

我们在顶部有一个假绿色动态标题.正如预期的那样,webview加载了一个初始弹出窗口,该弹出窗口位于可用屏幕的中心.

使用compose,结果如下:

Compose

顶部有假灰色动态标题,但webview被"拉伸",初始弹出窗口未居中.

这种情况也发生在独立的WebView中,顶部没有动态标题,因此这不是动态标题造成的问题.

Without dynamic header

WebView的实现非常简单

@SuppressLint("SetJavaScriptEnabled")
@Composable
fun PageBodyWithWebView(
    scrollState: ScrollState,
) {
    val context = LocalContext.current
    AndroidView(
        modifier = Modifier
            .verticalScroll(scrollState)
            .fillMaxWidth()
            .fillMaxHeight(), 
        factory = {
            WebView(context).apply {
                settings.javaScriptEnabled = true
                loadUrl(pageUrl)
            }
        })
}

那么这有什么错呢?我们如何将webview居中,以便用户可以按预期查看所有弹出窗口?

推荐答案

基本问题是,您没有从WebView读取滚动,AndroidView组件上的滚动修改器也没有执行您认为的操作.一种解决方案是在滚动webview时引发一个事件并响应:https://gist.github.com/rock3r/65642c73de8602ac40a340c84e20b16a

Android相关问答推荐

derivedStateOf与使用key和MutableState记住

为什么R8不混淆某些类?

编写Landscape BoxWithRequests具有错误的高度.(aspectRatio matchHeight约束第一次未按预期工作)

如何完全隐藏的元素堆叠在CardView?

Android库中的kotlinCompilerExtensionVersion

Kotlin Android VS Kotlin多平台

OverridePendingTransition已弃用,我该怎么办?

判断文本视图是否为单行

Dispatchers中的Kotlin协同程序.Main没有';t块主螺纹

可组合函数无限地从视图模型获取值

Jetpack Compose 中的用户在线指示器

如何在每次显示可组合项时执行代码(并且只执行一次)

Android 应用程序从 Android Studio 安装,但不是作为 .apk 在外部安装.抛出java.lang.UnsatisfiedLinkError

是什么导致调用 Firebase 服务器?

使用默认使用 RTL 语言的项目本地化 android 应用程序

调用时 listFiles() nullpointerexception

Jetpack Compose:mutableStateOf 不随流量更新

更新后 Firebase 服务无法在模拟器上运行

预览必须是顶级声明或具有默认构造函数的顶级类

如何使伴奏导航 BottomSheet 完全展开?