android 标题不会最小化JetPack中的对话框合成BottomSheetDialog(带有rememberNestedScrollInteropConnection)

bwitn5fc  于 2023-02-17  发布在  Android
关注(0)|答案(1)|浏览(90)

我有一个BottomDialog片段,它只包含Composable(行(标题)和LazyColumn)。我遇到的第一个问题是,当你向下滚动列表,然后你试图向上滚动列表时,列表不会滚动,对话框开始最小化。这个问题可以通过以下方法解决

modifier = Modifier.nestedScroll(rememberNestedScrollInteropConnection())

但是现在用户不能最小化一个对话框,当他试图通过触摸一个标题来做的时候。这就是我的问题,如何解决这个问题?
最小可复制代码
在创建这个例子的过程中,我发现我可以在触摸标题时最大化对话框,我也可以用手指开始移动动作到顶部(开始扩展它),然后将手指移动到屏幕底部,这样对话框将被关闭,但仍然不能以一种简单的方式最小化它。

ComposeView(requireContext()).apply {
            setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
            setContent {
                Theme {
                    Column(modifier = Modifier.nestedScroll(rememberNestedScrollInteropConnection())) {
                        Row {
                            Text(
                                modifier = Modifier
                                    .padding(16.dp)
                                    .fillMaxWidth(),
                                text = "Title"
                            )
                        }
                        LazyColumn(
                            Modifier
                                .weight(1f)
                                .fillMaxWidth()
                        ) {
                            items(100) {
                                Text(
                                    text = "Item $it",
                                    modifier = Modifier
                                        .padding(16.dp)
                                        .fillMaxWidth(),
                                )
                            }
                        }
                    }
                }
            }
        }

请不要建议使用BottomSheetScaffold。因为我想创建一个标准化的底部对话框。要使用它,我只需要传递一个项目列表和一个用于一个项目的合成函数。IMO BottomSheetScaffold根本不应该发布,因为它的设计“不好”。想象一下,在Jetpack合成之前,你围绕底部对话框编写代码,很好的分层。不。

cbjzeqam

cbjzeqam1#

作为一个临时决定。我只是认为LazyColumn工作正常,所以我需要将我的标头 Package 到LazyColumn中。
所以我创建了这个函数。只要把任何可组合的

@Composable
fun TrickyLazyColumn(content: @Composable () -> Unit) {
    LazyColumn {
        items(
            items = listOf(1),
            itemContent = {
                content.invoke()
            })
    }
}

相关问题