Box a Jetpack Compose-ban: mi ez, a composable tulajdonságai és hogyan működik

Szerző: IT Sectr Megjelenés: 2026-06-29 Olvasási idő: 10 perc

Box — egy composable függvény a Jetpack Compose-ban gyermekelemek egymásra rétegezéséhez. A Row és Column ellentétben a Box egy területre helyezi az elemeket, lehetővé téve textúrák, jelvények és egyedi indikátorok létrehozását. A Google Android Documentation, 2025 szerint a Box a Compose három alapvető konténerének egyike, és rugalmas rétegkezelést biztosít a Modifier.align és Modifier.zIndex segítségével.

Főbb pontok

  • Box — Compose konténer elemek egymásra rétegezésével, ahol minden következő elem az előző fölé rajzolódik.
  • contentAlignment beállítja a Box teljes tartalmának igazítását, a Modifier.align pedig az egyes gyermekelemek egyedi pozícionálását.
  • Modifier.zIndex kezeli az elemek rajzolási sorrendjét, lehetővé téve egyes rétegek mások fölé emelését.
  • Box szöveg képekre ráhelyezésére, értesítési jelvények, jelölők és háttérfedések létrehozására szolgál.
  • Modifier.clipToBounds a gyermekelemek rajzolását a Box határaihoz korlátozza, megakadályozva a tartalom kijutását a konténerből.

Mi az a Box a Jetpack Compose-ban

Box — egy composable függvény, amely a gyermekelemeket egy területre helyezi, egymásra rétegezve őket. Az első gyermekelem alul, az utolsó — felül rajzolódik. Alapértelmezésben a Box a legnagyobb gyermekelem méretéhez igazodik.

Ellentétben a Row-val és Column-nal, a Box nem sorrendben rendezi az elemeket — az összes gyermekelem ugyanazt a területet foglalja el, és átfedhetik egymást. Ez teszi a Box-t nélkülözhetetlenné a felületi rétegek összeállításához.

A Box méretét a szabály határozza meg: ha egyetlen gyermekelem sem rendelkezik rögzített mérettel, a Box minimális méretre összehúzódik. Ha legalább egy gyermekelem rendelkezik Modifier.fillMaxSize-szel, a Box maximális méretre tágul.

A Android Developers Blog, 2024 szerint a Box a leghatékonyabb konténer a Compose-ban olyan esetekben, amikor az elemek nem igényelnek sorrendi elrendezést. A Box nem végez további méréseket a pozícionáláshoz, ellentétben a Row-val és Column-nal.

A Box alap szignatúrája

Box elfogadja a modifier, contentAlignment és propagateMinConstraints paramétereket. Az összes gyermekelem a content blokkban kerül átadásra, ahol mindegyik rendelkezhet saját módosítókkal.

kotlin
@Composable
fun BoxExample() {
    Box(
        modifier = Modifier.size(200.dp),
        contentAlignment = Alignment.Center
    ) {
        Box(
            modifier = Modifier.fillMaxSize().background(Color.Blue)
        )
        Text(
            text = "Ödv",
            color = Color.White
        )
    }
}

ContentAlignment és Modifier.align a Box-ban

contentAlignment — a Box egy paramétere, amely az alapértelmezett igazítást állítja be az összes gyermekelem számára. Ha nincs megadva, akkor Alignment.TopStart használatos — az elemek a konténer bal felső sarkába kerülnek.

Modifier.align lehetővé teszi egy adott gyermekelem igazításának módosítását a contentAlignment-tól függetlenül. Például egy Alignment.Center-rel rendelkező Box tartalmazhat egy Modifier.align(Alignment.BottomEnd) elemeket, ami a jobb alsó sarokhoz lesz rágzítva.

A Material Design Guidelines, 2025 szerint a Modifier.align hasznos a jelvények és ikonok háttérképek fölé helyezéséhez. Lehetővé teszi általános igazítás beállítását a Box teljes tartalmához, és annak felülírását egyes elemek esetében.

Az Alignment értékek táblázata

ÉrtékPozíció a Box-banAlkalmazási példa
TopStartBal felső sarokIkon a kártya sarkában
TopCenterFelső középCím a kép fölött
CenterKonténer közepeKözépre igazított szöveg a háttéren
BottomEndJobb alsó sarokÉrtesítési számláló ikonon
BottomCenterAlsó középFelirat a kép alatt

Példa Modifier.align használattal

Ebben a példában a Box tartalmaz egy háttérképet és egy jelvényt a jobb alsó sarokban. A Modifier.align(BottomEnd) a jelvényt a Box teljes contentAlignment-jétől függetlenül pozícionálja.

kotlin
@Composable
fun BadgeExample() {
    Box(
        modifier = Modifier.size(120.dp),
        contentAlignment = Alignment.Center
    ) {
        Box(
            modifier = Modifier.size(100.dp).background(Color.Gray)
        )
        Box(
            modifier = Modifier
                .size(30.dp)
                .align(Alignment.BottomEnd)
                .background(Color.Red, CircleShape)
        )
    }
}

Rétegek kezelése zIndex-szel

Modifier.zIndex kezeli az elemek rajzolási sorrendjét a Box-on belül. Alapértelmezésben az elemek deklarációs sorrendben rajzolódnak — az első elem alul, az utolsó felül. A zIndex megváltoztatja ezt a sorrendet.

Egy 2.0f zIndex értékkel rendelkező elem egy 1.0f zIndex értékű elem fölé rajzolódik, függetlenül a kódbeli sorrendjüktől. A negatív zIndex értékek az elemet a többi alá helyezik. A Android Developers, 2024 szerint a zIndex csak a rajzolási sorrendet befolyásolja, nem az érintési események feldolgozását.

zIndex különösen hasznos animációkban és draggable komponensekben, ahol egy elemnek ideiglenesen a többi fölé kell emelkednie. Például egy kártya húzásakor a zIndex megnő, hogy ne takarják a szomszédos elemek.

kotlin
@Composable
fun ZIndexExample() {
    Box(modifier = Modifier.size(150.dp)) {
        Box(modifier = Modifier.size(80.dp)
            .align(Alignment.TopStart)
            .zIndex(2.0f)
            .background(Color.Green))
        Box(modifier = Modifier.size(100.dp)
            .align(Alignment.Center)
            .zIndex(1.0f)
            .background(Color.Blue))
    }
}

Gyakorlati példák a Box használatára

Box széles körben használatos szöveg képre helyezéséhez. A háttérkép kerül előre, majd a szöveg Modifier.align segítségével a háttér fölé pozícionálva.

kotlin
@Composable
fun ImageWithOverlay() {
    Box(modifier = Modifier.fillMaxWidth().height(200.dp)) {
        Image(
            painter = painterResource(R.drawable.photo),
            contentDescription = "Photo",
            modifier = Modifier.fillMaxSize(),
            contentScale = ContentScale.Crop
        )
        Box(
            modifier = Modifier.fillMaxSize()
                .background(Color.Black.copy(alpha = 0.4f))
        )
        Text(
            text = "Cím",
            color = Color.White,
            modifier = Modifier.align(Alignment.BottomStart)
                .padding(16.dp)
        )
    }
}

Második példa — Box betöltési indikátor létrehozásához. A Box a teljes képernyőterületet elfoglalja, a CircularProgressIndicator pedig a contentAlignment segítségével középre kerül.

kotlin
@Composable
fun LoadingOverlay() {
    Box(
        modifier = Modifier.fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        CircularProgressIndicator(
            modifier = Modifier.size(48.dp)
        )
    }
}

A Box méretkorlátozásai

Box alapértelmezésben a tartalom méretéhez igazodik. Ha a gyermekelemek különböző méretűek, a Box a legnagyobb elem méretét veszi fel. Gyermekelemek hiányában a Box minimális méretre összehúzódik.

Modifier.clipToBounds a gyermekelemek rajzolását a Box határaihoz korlátozza. E módosító nélkül a gyermekelemek kijuthatnak a Box-ból. A Material Design Guidelines, 2025 szerint a clipToBounds kötelező a Modifier.scale vagy Modifier.graphicsLayer használatakor a Box-on belül.

propagateMinConstraints — a Box paramétere, amely továbbítja a minimális méretkorlátokat a gyermekelemeknek. Ha true értékre van állítva, a gyermekelemek nem lehetnek kisebbek a Box minimális méreténél. Ez a viselkedés fontos rögzített minimális méretű egyedi konténerek létrehozásakor.

  • Box — minimális konténer, ha nincsenek méretek beállítva és nincsenek fillMaxSize gyermekelemek
  • Modifier.clipToBounds megakadályozza a tartalom kijutását a Box határain túl
  • propagateMinConstraints továbbítja a minimális korlátokat a gyermekelemeknek

Gyakran Ismételt Kérdések

Miben különbözik a Box a Row-tól és Column-tól?

Box egymásra rétegezi az elemeket, míg a Row és Column sorrendben rendezi őket. A Box rétegekhez és átfedésekhez alkalmas, a Row — vízszintes sorokhoz, a Column — függőleges listákhoz.

Hogyan igazítsak egy elemet a Box-ban másképp, mint a többit?

Használja a Modifier.align-et az adott gyermekelemhez. Ez a módosító felülírja a Box számára beállított contentAlignment-t. Például a Modifier.align(Alignment.BottomEnd) a jobb alsó sarokhoz rágzítja az elemet.

Hogyan készítsek Box-t háttérszínnel és középre igazított szöveggel?

Állítsa be a Box-t Modifier.size és Modifier.background segítségével, és állítsa a contentAlignment-t Alignment.Center-re. A Box-on belül lévő szöveg automatikusan középre kerül további módosítók nélkül.

Mi az a propagateMinConstraints a Box-ban?

A propagateMinConstraints továbbítja a Box minimális méretkorlátozásait a gyermekelemeknek. True értéknél a gyermekelemek nem lehetnek kisebbek, mint a Box számára Modifier.size vagy Modifier.constrain segítségével beállított minimális méret.

Hogyan helyezzek el egy elemet a Box-ban egy másik fölé sorrendvezérLéssel?

Az elemek deklarációs sorrendje a Box-ban meghatározza vizuális sorrendjüket: az első elem alul, az utolsó — felül. Pontos vezérléshez használja a Modifier.zIndex-t — a nagyobb értékkel rendelkező elem a többi fölé rajzolódik.

Összefoglalás

  • Box — Compose konténer gyermekelemek egymásra rétegezésével egy területen, ahol minden következő elem az előző fölé rajzolódik.
  • contentAlignment beállítja az alapértelmezett igazítást az összes gyermekelem számára, a Modifier.align pedig az egyedi pozícionálást.
  • Modifier.zIndex kezeli a rétegek rajzolási sorrendjét, lehetővé téve elemek emelését vagy süllyesztését a deklarációs sorrendtől függetlenül.
  • Box szöveg képekre helyezésére, jelvények, betöltési indikátorok és háttérfedések létrehozására szolgál.
  • Modifier.clipToBounds a gyermekelemek rajzolását a Box határaihoz korlátozza, megakadályozva a tartalom kijutását a konténerből.
  • propagateMinConstraints továbbítja a minimális korlátokat a gyermekelemeknek, hasznos rögzített minimális méretű egyedi konténerek létrehozásához.
  • Elemek vízszintes vagy függőleges sorrendbe rendezéséhez használja a Row-t vagy Column-t, rétegekhez és átfedésekhez pedig a Box-t.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is