如何检查 LazyColumn 中的项目对于屏幕高度是否太少?
How to check if the items in LazyColumn is too few for the height of the screen?
由于 LazyColumn 没有滚动条,我尝试了这个
有没有办法让我检查项目是否太少而无法滚动列表,因为滚动条仍然可见并且我想尽可能隐藏它?
在这种情况下,您应该使用惰性列表状态:它包含有关可见元素的信息,您需要检查所有元素是否完全可见。
当您需要连续读取任何状态并根据该状态产生一些值时,您应该使用derivedStateOf
来防止冗余重组。
val state = rememberLazyListState()
val canBeScrolled by remember {
derivedStateOf {
val layoutInfo = state.layoutInfo
val visibleItemsInfo = layoutInfo.visibleItemsInfo
if (layoutInfo.totalItemsCount == 0) {
false
} else {
val firstVisibleItem = visibleItemsInfo.first()
val lastVisibleItem = visibleItemsInfo.last()
val viewportHeight = layoutInfo.viewportEndOffset + layoutInfo.viewportStartOffset)
!(firstVisibleItem.index == 0 &&
firstVisibleItem.offset == 0 &&
lastVisibleItem.index + 1 == layoutInfo.totalItemsCount &&
lastVisibleItem.offset + lastVisibleItem.size <= viewportHeight)
}
}
}
LazyColumn(state = state) {
// ...
}
由于 LazyColumn 没有滚动条,我尝试了这个
有没有办法让我检查项目是否太少而无法滚动列表,因为滚动条仍然可见并且我想尽可能隐藏它?
在这种情况下,您应该使用惰性列表状态:它包含有关可见元素的信息,您需要检查所有元素是否完全可见。
当您需要连续读取任何状态并根据该状态产生一些值时,您应该使用derivedStateOf
来防止冗余重组。
val state = rememberLazyListState()
val canBeScrolled by remember {
derivedStateOf {
val layoutInfo = state.layoutInfo
val visibleItemsInfo = layoutInfo.visibleItemsInfo
if (layoutInfo.totalItemsCount == 0) {
false
} else {
val firstVisibleItem = visibleItemsInfo.first()
val lastVisibleItem = visibleItemsInfo.last()
val viewportHeight = layoutInfo.viewportEndOffset + layoutInfo.viewportStartOffset)
!(firstVisibleItem.index == 0 &&
firstVisibleItem.offset == 0 &&
lastVisibleItem.index + 1 == layoutInfo.totalItemsCount &&
lastVisibleItem.offset + lastVisibleItem.size <= viewportHeight)
}
}
}
LazyColumn(state = state) {
// ...
}