当键盘出现时,我正试图自动将LazyColumn
滚动到最后一个项目.然而,下面的代码是在其他StackOverflow讨论中建议的,其工作方式不一致,如所附图片所示,并且很少将最后一个项目带到视图中.
@OptIn(ExperimentalLayoutApi::class)
@Preview(showBackground = true)
@Composable
fun ChatScreen() {
val viewModel: ChatScreenViewModel = viewModel()
val textFieldContent = viewModel.textFieldState
val messages = viewModel.messageListState
val listState = viewModel.messageListScrollState
val keyboardVisibility = WindowInsets.isImeVisible
LaunchedEffect(key1 = keyboardVisibility) {
listState.animateScrollToItem(listState.layoutInfo.totalItemsCount)
}
ChatbotAppTheme {
Column(
modifier = Modifier
.fillMaxSize()
.systemBarsPadding()
.imePadding()
) {
// LazyColumn to hold messages
LazyColumn(
modifier = Modifier
.weight(1f),
state = listState
) {
items(messages) {
MessageBubble(
text = it.body,
role = it.role
)
}
}
Row(
modifier = Modifier
.fillMaxWidth()
.background(Color.Transparent),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceAround
) {
CustomTextField(
modifier = Modifier.weight(1f),
text = textFieldContent.value,
onValueChangeFunc = {viewModel.onTextFieldContentChanged(it)},
trailingIconFunc = {viewModel.clearTextField()},
)
CustomButton (enabled = textFieldContent.value.isNotEmpty()) {
viewModel.onSendButtonPressed()
}
}
}
}
}
我已经在 list 中设置了所需的android:windowSoftInputMode="adjustResize"
,并在MainActivity
中设置了enableEdgeToEdge()
,以确保isImeVisible
正常工作.但是,我无法得到预期的结果.我真的很感激任何帮助或洞察力.