Standardmäßig, Column {}
hat die Breite des größten untergeordneten Elements. Wie kann ich alle anderen Elemente an die Breite des übergeordneten Elements anpassen? Column
? Wenn ich benutze Modifier.fillMaxWidth()
Die Elemente nehmen den gesamten verfügbaren Platz ein und bilden das übergeordnete Element Column
größer. Wie kann ich das gleiche Verhalten erreichen wie a Modifier.matchParentWidth()
Modifikator bereitstellen würde?
Übereinstimmungsbreite des übergeordneten Elements in Spalte (Jetpack Compose)
Gabriele Marotti
Sie können den Modifikator verwenden .width(IntrinsicSize.Max)
Column(Modifier.width(IntrinsicSize.Max)) {
Box(Modifier.fillMaxWidth().background(Color.Gray)) {
Text("Short text")
}
Box(Modifier.fillMaxWidth().background(Color.Yellow)) {
Text("Extremely long text giving the width of its siblings")
}
Box(Modifier.fillMaxWidth().background(Color.Green)) {
Text("Medium length text")
}
}
-
Irgendeine Idee, wann man .Min vs. .Max verwendet? Die akzeptierte Antwort verwendet .Min, während Ihre .Max ist.
– Engel Koh
31. August 2021 um 4:51 Uhr
Yannik
Die Lösung besteht darin, die Macht von zu nutzen intrinsische Messungen.
Anstatt zu verwenden Modifier.fillMaxWidth()
wir gebrauchen width(IntrinsicSize.Min)
um die Breite an die Mindestbreite des größten Elements anzupassen
Hier verwende ich Modifier.fillMaxWidth
und die Elemente machen die übergeordnete Spalte nicht größer:
@Composable
fun Demo() {
Column(modifier = Modifier.width(300
.dp)) {
Text(text = "with fillMaxWidth modifier",modifier = Modifier.fillMaxWidth().background(Color.Red))
Text(text = "without fillMaxWidth modifier",modifier = Modifier.background(Color.Gray))
}
}
Was ich normalerweise tue, um das zu erreichen matchParentWidth
ist so etwas (Es ist schmutzig, aber erledigt die Arbeit):
val context = AmbientContext.current.resources
val displayMetrics = context.displayMetrics
val scrWidth = displayMetrics.widthPixels / displayMetrics.density
Column(modifier = Modifier.width(300
.dp)) {
Text(text = "with fillMaxWidth modifier",modifier = Modifier.fillMaxWidth().background(Color.Red))
Text(text = "without fillMaxWidth modifier",modifier = Modifier
.preferredWidth(scrWidth.dp)
.background(Color.Gray))
}
-
Hallo, ich suche hier nach dynamischer Größenanpassung. Ich kann keine feste Größe für die übergeordnete Spalte angeben. Die Spalte sollte so breit sein wie ihr breitestes Kind
– Yannick
31. Januar 2021 um 23:00 Uhr
-
Dies ist die beste Lösung, wenn Sie eine pixelgenaue proportionale Geometrie haben möchten. Vielen Dank. Mir fehlte die Division nach Dichte! Vielen Dank.
– C. Hellmann
12. April 2021 um 10:20 Uhr
-
Außerdem was ich damit erreicht habe: gist.github.com/cicerohellmann/20f276f04a694e7bb588d84162169a73
– C. Hellmann
12. April 2021 um 10:30 Uhr
kannst du einfach verwenden fillMaxWidth()
Row(modifier = Modifier
.fillMaxWidth()
.background(Color.Cyan),) {
Spacer(modifier = Modifier.padding(start = 4.dp))
Image(
painter = painterResource(R.drawable.tom_jerry),
contentDescription ="this is image",
modifier = Modifier
.size(40.dp)
.clip(shape = CircleShape).align(CenterVertically),
alignment = Alignment.Center,
contentScale = ContentScale.FillHeight
)
Column(modifier = Modifier.padding(start = 10.dp)) {
Text(text = "Name : ${msg.name}")
Text(text = "age : ${msg.age.toString()}")
}
Sie bewerben sichModifier.width(300.dp)
auf die übergeordnete Spalte, die maximale Breite, die ein untergeordnetes Element in dieser Spalte einnehmen kann 300.dp
.
Verwenden Modifier.fillMaxWidth()
auf Ihrem Text
composable ist in diesem Zusammenhang gleichbedeutend mit verwenden Modifier.preferredWidth(300.dp)
weil es nur so breit werden kann, wie es zusammensetzbar ist.
-
Hallo, ich suche hier nach dynamischer Größenanpassung. Ich kann keine feste Größe für die übergeordnete Spalte angeben. Die Spalte sollte so breit sein wie ihr breitestes Kind
– Yannick
31. Januar 2021 um 23:00 Uhr
-
Hallo, ich suche hier nach dynamischer Größenanpassung. Ich kann keine feste Größe für die übergeordnete Spalte angeben. Die Spalte sollte so breit sein wie ihr breitestes Kind
– Yannick
31. Januar 2021 um 23:00 Uhr