是否可以在 compose 中構建一個網格,其中所有元素的大小都是均勻的,由最大的內容決定?我還希望這個網格可以包裹內容,而不受任何預設高度的約束。
所以像這樣的事情。讓我們假設網格是全角的,我們知道只有 2 列。
____________ ____________
| 1. |2. Medium |
|Short stuff |length |
| |text |
|____________|____________|
|3. This is | |
|a very long |4. hi! |
|content here| |
|____________|____________|
我一直在嘗試創建這樣的東西,但我認為在 Compose 中不設定網格的某種整體高度是不可能的?
你可以有這樣的事情:
@Composable
fun SampleGrid() {
Row(modifier = Modifier.fillMaxWidth()) {
Column(modifier = Modifier.weight(0.5f)) {
Cell(modifier = Modifier.weight(0.5f))
Cell(modifier = Modifier.weight(0.5f))
}
Column(modifier = Modifier.weight(0.5f)) {
Cell(modifier = Modifier.weight(0.5f))
Cell(modifier = Modifier.weight(0.5f))
}
}
}
所以它是一個很好的 2x2,甚至是網格,但它weigth會使元素增長到它想要的高度,直到它被周圍的一些其他視圖或具有設定高度的容器限制。
我們可以添加height(IntrinsicSize.Max)到 Column 修飾符,所以它有點包裝內容但是如果另一列中有很多/更少的內容怎么辦?高度不同步
____________ ____________
| 1. |2. hi! |
|Short stuff |____________|
| |4. hi! |
|____________|____________|
|3. This is |
|a very long |
|content here|
|____________|
您可以使用Column包裝器和多個來構建網格Rows,但會遇到相同的問題。
我發現即使使用 custom 也是一個問題Layout,尤其是SubcomposeLayout。我們可以讓一種布局依賴于另一種布局,但是如果您計算一行的高度,結果發現第二行需要更多空間,因為它有更多內容怎么辦?然后您必須重新測量第一個以使其更大,但不允許在 Compose 中測量兩次。
我的理解正確嗎?具有均勻大小元素的網格是否不可能隨著其最大內容(而不是受某些高度的限制)而增長?對我來說感覺有點像雞和蛋的問題......
uj5u.com熱心網友回復:
您可以使用.height(IntrinsicSize.Min)應用于解決此問題Row:它將最大高度限制為最小Column高度:
Row(
modifier = Modifier
.width(200.dp)
.height(IntrinsicSize.Min)
) {
Column(modifier = Modifier.weight(1f)) {
Cell("Short stuff", modifier = Modifier.weight(1f))
Cell(LoremIpsum(10).values.first(), modifier = Modifier.weight(1f))
}
Column(modifier = Modifier.weight(1f)) {
Cell("Medium length text", modifier = Modifier.weight(1f))
Cell("hi", modifier = Modifier.weight(1f))
}
}
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/377854.html
標籤:安卓 科特林 android-jetpack-compose
上一篇:Kotlin中的throw陳述句
