LazyColumn StickyFooter 或将焦点放在底部项目上

Axb*_*rov 6 android-jetpack-compose lazycolumn

我想创建一个小信使,其中的消息从底部添加(新消息放置在列表的底部)。为了实现这一点,我将LazyColumnsreversedLayout属性设置为true。但如果我这样做,粘性标题也会被反转(就像粘性页脚一样)。如果我将属性设置verticalArrangement为, Bottom那么当键盘打开时,下面的消息不会保持焦点(它将转到下面的键盘)。此外,消息列表不是从最新的消息开始,而是从最旧的消息开始(就像从顶部开始滚动一样)。

StickyFooter 或将焦点保持在底部项目可以解决问题吗?我能为此做什么?

我写的代码:

LazyColumn(
    modifier = Modifier
        .fillMaxWidth()
        .weight(1f),
    contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp),
    reverseLayout = true,
) {
    val messages = state.messages.asReversed()
    messages.forEachIndexed { index, message ->
        val nextMessage = messages.getOrNull(index - 1)
        val prevMessage = messages.getOrNull(index + 1)
        val isNearToPrevious = isNear(message, prevMessage)
        val isNearToNext = isNear(message, nextMessage)
        item(message.id) {
            GroupMessageItem(
                message,
                isNearToPrevious,
                isNearToNext
            )
        }
        if (!message.createdAt.isSameDayWith(prevMessage?.createdAt)) {
            stickyHeader(key = "item: ${message.id}") {
                Column(
                    modifier = Modifier
                        .fillMaxWidth()
                        .padding(top = 12.dp),
                    horizontalAlignment = Alignment.CenterHorizontally
                ) {
                    Text(
                        modifier = Modifier
                            .wrapContentSize()
                            .clip(MaterialTheme.shapes.small)
                            .background(MaterialThemeCustom.colors.backgroundVariant)
                            .padding(horizontal = 4.dp, vertical = 2.dp),
                        text = "Today",
                        style = MaterialThemeCustom.typography.regular12,
                        color = MaterialTheme.colors.onPrimary
                    )
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)