撰写 ModalBottomSheet 内的 Emoji2 emojipicker 不滚动

Giu*_*ime 5 android android-view android-jetpack android-jetpack-compose

我需要使用 androidx 中的 emoji2-emojipicker,它是通过 XML 视图制作的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/emoji_picker_header"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/emoji_picker_header_height"
        android:paddingEnd="@dimen/emoji_picker_header_padding"
        android:paddingStart="@dimen/emoji_picker_header_padding" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/emoji_picker_body"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

(来源https://github.com/androidx/androidx/tree/androidx-main/emoji2/emoji2-emojipickerhttps://developer.android.com/jetpack/androidx/releases/emoji2

我在撰写中像这样使用它:

AndroidView(
    factory = { context ->
        EmojiPickerView(context)
    },
    modifier = Modifier
        .fillMaxWidth()
        .height(300.dp)
)
Run Code Online (Sandbox Code Playgroud)

在脚手架或柱子等普通表面上使用表情符号选择器没有任何问题,它滚动得非常好并且不会滞后。

如果我将表情符号选择器放入另一个可滚动可组合项(例如 )中ModalBottomSheet,它就不再滚动。
为了使其滚动,我需要添加修饰符,verticalScroll(rememberScrollState())但这AndroidView会使其变得滞后并且需要很长时间才能加载+如果我使其像那样可滚动,则表情符号选项卡由于某种原因无法工作。
我猜它是滞后的,因为我告诉RecyclerView它有无限的高度,所以它会立即渲染所有表情符号,而不是懒惰地渲染。

阅读周围的内容,当 RecyclerView 位于另一个可滚动可组合项中时,滚动事件似乎无法通过子父可组合项正确传播。关于如何解决这个问题有什么建议吗?

这是一个演示,显示了一个可以正常工作的屏幕(任务屏幕)和一个不能正常工作的屏幕ModalBottomSheet: https: //drive.google.com/file/d/1vU94uPwBTtpDg8hb0JauqZmw-LHyP9Mz/view ?usp=sharing(在此视频中,我verticalScroll在 ModalBottomSheet emojipicker 中添加了修饰符,使其可滚动,否则它不会滚动,而任务中的修饰符没有该修饰符)

小智 0

为了确保在底部工作表内滚动,请设置要滚动的回收器或视图

recycler.isNestedScrollingEnabled = true
Run Code Online (Sandbox Code Playgroud)