在官方文档中可以看到有一个名为 SubcomposeLayout 的布局定义为
布局的模拟,允许在测量阶段对实际内容进行细分,例如使用测量期间计算的值作为子项组成的参数。
可能的用例:
您需要知道在组合过程中父级传递的约束,并且无法仅使用自定义 Layout 或 LayoutModifier 来解决您的用例。请参阅 androidx.compose.foundation.layout.BoxWithConstraints。
您希望在构建第二个子项时使用第一个子项的大小。
您想根据可用尺寸懒惰地组合您的项目。例如,您有一个包含 100 个项目的列表,您不必组合所有项目,而是只组合当前可见的项目(例如其中 5 个),并在组件滚动时组合下一个项目。
我用SubcomposeLayout关键字搜索了 Stackoverflow,但找不到任何相关内容,创建了这个示例代码,从官方文档中复制了大部分代码,以测试和了解它是如何工作的
@Composable
private fun SampleContent() {
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
) {
SubComponent(
mainContent = {
Text(
"MainContent",
modifier = Modifier
.background(Color(0xffF44336))
.height(60.dp),
color = Color.White
)
},
dependentContent = {
val size = it
println(" Dependent size: $size")
Column() {
Text(
"Dependent Content",
modifier = Modifier
.background(Color(0xff9C27B0)),
color = Color.White
)
}
}
)
}
} …Run Code Online (Sandbox Code Playgroud) 我用来LazyVerticalGrid显示项目列表。
LazyVerticalGrid(
cells = GridCells.Fixed(2),
modifier = Modifier.fillMaxSize(),
state = listState,
content = {
Box(modifier = boxModifier) {
ProductItemView(
item = items[index]
)
}
}
}
)
Run Code Online (Sandbox Code Playgroud)
如何调整所有项目的高度?或者我应该使用VerticalGrid() 之外的其他东西?
我想创建一个像 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) 据我所知,我们只能使用Rowsand ColumnsinJetpack Compose来显示列表。如何实现如下图所示的交错网格布局?使用 Recyclerview 和交错网格布局管理器的正常实现非常简单。但是如何在 中做同样的事情Jetpack Compose?