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)
| 归档时间: |
|
| 查看次数: |
541 次 |
| 最近记录: |