Übereinstimmungsbreite des übergeordneten Elements in Spalte (Jetpack Compose)

Lesezeit: 3 Minuten

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?

Benutzeravatar von Gabriele Mariotti
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")
        }
    }

Geben Sie hier die Bildbeschreibung ein

  • 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

Benutzeravatar von Yannick
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: OySZ1

@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()}")

        }

Geben Sie hier die Bildbeschreibung ein

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

1436240cookie-checkÜbereinstimmungsbreite des übergeordneten Elements in Spalte (Jetpack Compose)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy