Dev*_*021 12 android-jetpack-compose
我想创建一个像 UI 一样具有相同高度行的网格布局,但我找不到用于获取当前可用屏幕尺寸的函数(应用程序应该看起来像那样)
我尝试在LazyVerticalGridModifier.fillMaxHeight()
内部使用来生成相同大小的行,但它不起作用。除此之外,我还有手动设置每个行项目高度的想法,但我找不到在 jetpack compose 中获取可用屏幕尺寸的函数(然后我将屏幕高度除以行数) )。
val numbers = (0..34).toList()
LazyVerticalGrid(
cells = GridCells.Fixed(7)
) {
items(numbers.count()) {
Column(horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = "#"+numbers.get(it))
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用aspectRatio修饰符:
LazyVerticalGrid(
columns = GridCells.Adaptive(100.dp),
) {
items(100) {
Box(
modifier = Modifier.aspectRatio(1f)
) { }
}
}
Run Code Online (Sandbox Code Playgroud)
完整示例:
@Composable
fun Body(modifier: Modifier) {
Column (
modifier = modifier,
) {
Text(
text = "Without aspect ratio",
modifier = Modifier.padding(12.dp),
style = MaterialTheme.typography.h5,
)
LazyVerticalGrid(
columns = GridCells.Adaptive(100.dp),
modifier = Modifier.weight(1f),
) {
items(100) {
Surface (
modifier = Modifier
.padding(12.dp),
color = Color(0xff2187bb),
) {
RandomSizeBox()
}
}
}
Divider()
Text(
"With aspect ratio",
modifier = Modifier.padding(12.dp),
style = MaterialTheme.typography.h5,
)
LazyVerticalGrid(
columns = GridCells.Adaptive(100.dp),
modifier = Modifier.weight(1f),
) {
items(100) {
Surface (
modifier = Modifier
.aspectRatio(1f)
.padding(12.dp),
color = Color(0xffbb2187),
) {
RandomSizeBox()
}
}
}
}
}
@Composable
fun RandomSizeBox() {
Box(modifier = Modifier.height((10 + Math.random() * 90).dp))
}
Run Code Online (Sandbox Code Playgroud)
还有另一种也许简单的方法可以做到这一点。您可以密切关注当前最高的项目,并相应地更新所有其他项目。这是一个例子:
var desiredItemMinHeight by remember {
mutableStateOf(0.dp)
}
val density = LocalDensity.current
LazyVerticalGrid(
modifier = Modifier.fillMaxSize(),
columns = GridCells.Fixed(count = 2),
) {
items(state.items) {
ItemBox(
modifier = Modifier
.onPlaced {
with(density) {
if (desiredItemMinHeight < it.size.height.toDp()) {
desiredItemMinHeight = it.size.height.toDp()
}
}
}
.defaultMinSize(minHeight = desiredItemMinHeight),
)
}
}
Run Code Online (Sandbox Code Playgroud)
对于它的价值,您可以通过以下方式测量屏幕高度:
val screenHeight = LocalConfiguration.current.screenHeightDp
Run Code Online (Sandbox Code Playgroud)
但使用滚动修饰符使网格可滚动可能是值得的: https: //developer.android.com/jetpack/compose/gestures#scroll-modifiers
归档时间: |
|
查看次数: |
6732 次 |
最近记录: |