当前位置: 首页 > 知识库问答 >
问题:

Android Compose - 将传统视图与 ComposeView 结合使用

潘向明
2023-03-14

我用已有的片段组合。我的xml结构

<CoordinatorLayout>
    <AppBarLayout>
        <CollapsingToolbarLayout>
            <ImageView />
            <MaterialToolbar />
        </CollapsingToolbarLayout>
    </AppBarLayout>

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <androidx.compose.ui.platform.ComposeView
            android:id="@+id/composeContent"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </androidx.core.widget.NestedScrollView>
</CoordinatorLayout>

在ComposeView中,我使用LazyColum,它与日志崩溃

java.lang.IllegalStateException: Nesting scrollable in the same direction layouts like ScrollableContainer and LazyColumn is not allowed. If you want to add a header before the list of items please take a look on LazyColumn component which has a DSL api which allows to first add a header via item() function and then the list of items via items().

我认为这个错误的原因是LazyColum(可滚动)放在其他可滚动(NestedScrollView)中。但是如果我删除嵌套的ScrollView,它看起来像

<androidx.compose.ui.platform.ComposeView
    android:id="@+id/composeContent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

当我在LazyColumn中滚动列表时,CollapsingToolbarLayout不滚动。这是下一个bug。

如何修复它?

请帮帮我,谢谢。

共有2个答案

充煌
2023-03-14

从< code >中展开您的撰写视图

 * setContent {
 *     Surface(
 *         // Add this somewhere near the top of your layout, above any scrolling layouts
 *         modifier = Modifier.nestedScroll(rememberViewInteropNestedScrollConnection())
 *     ) {
 *         LazyColumn() {
 *             // blah
 *         }
 *     }
 * }

这是一个现有的撰写错误,可以在issue tracker中找到。

陶弘业
2023-03-14

我想这是一个问题,所以我打开了一个。

https://issuetracker.google.com/issues/199693522

原来这不是问题。

根据compose团队的反馈,LazyColumn看起来有一个非无限的高度。通过不给你的LazyColumn一个固定的高度,让你的ComposeView的高度match_parent(因为scrollview的高度是无限的,所以是无限的),LazyColumn无法工作,因为它现在有无限的高度。

 类似资料:
  • 我是JavaFX的新手,通常也不太熟悉使用Java中的数据库,但是我必须转换我制作的现有JavaFX程序,以删除填充TableView表的列表,并用数据库中的项目替换它,并赋予用户添加或删除的能力。对于学生来说,这基本上是一个非常简化的课程注册程序。一切正常,我只需要使用一个数据库,这样就可以使用教员端来查看哪些学生注册了哪些课程。我只是不熟悉调用数据库并将其应用到tableView的最佳方式。我

  • 问题内容: 我在SO上发现了其他几个有关JavaMail API和通过SMTP服务器发送邮件的问题,但是没有一个使用TLS安全性进行讨论。我正在尝试使用JavaMail通过我的工作SMTP邮件服务器向我发送状态更新,但是它需要TLS,而且我在网上找不到任何有关如何使用JavaMail访问需要TLS加密的SMTP服务器的示例。有人能帮忙吗? 问题答案: 实际上,我们的产品中确实有一些通知代码,如果有

  • 我已经阅读了一些关于SaaS/PaaS/IaaS的信息,我在想: 如果我提供了一个SaaS应用程序,我的客户能否使用PaaS开发和部署他自己的应用程序,PaaS将使用一些API与我的SaaS应用程序交互?还是我对云服务的理解有误?

  • 问题内容: 谁能给我指出一个完整的示例,而 不是 在App Engine上使用OAuth2和Flask对Google帐户进行身份验证? 我试图让用户授予对Google日历的访问权限,然后使用该访问权限从日历中检索信息并对其进行进一步处理。我还需要存储并稍后刷新OAuth2令牌。 我看过Google的oauth2client库,可以开始检索授权代码了,但是我从那里有点迷失了。通过查看Google的O

  • 问题内容: TextMate似乎使用了我假定的内置Python版本(sys.path不起作用)。您如何配置它以使用3.1?我已经安装了3.1软件包,并且可以将IDLE用于交互式会话,但是现在需要使用TextMate。 谢谢 问题答案: TextMate使用变量的值来查找Python解释器的路径。一个好的解决方案是利用TextMate的能力来定义变量(例如基于每个项目): 打开一个新的或现有的Tex

  • 问题内容: 我想使用并且在本节中非常基础,我需要一些帮助,并且在网上之前对此主题进行了研究,但是没有令人满意的解决方案。 1-如何FFmpeg通过使用。(我不想使用Ubuntu,请不要建议。) 2-如何通过插入命令? 最后通知:我使用和。 任何建议,将不胜感激。 问题答案: 如果您需要进一步的帮助,请确切说明您要实现的目标以及不起作用的目标… 更新-根据评论: 要在Android上通过命令行使用f