Box — is een composable-functie in Jetpack Compose voor het plaatsen van onderliggende elementen bovenop elkaar volgens het laagprincipe. In tegenstelling tot Row en Column stapelt Box elementen in één gebied, waardoor textures, badges en aangepaste indicatoren kunnen worden gemaakt. Volgens Google Android Documentation, 2025 is Box een van de drie basiscontainers van Compose en biedt het flexibel laagbeheer met Modifier.align en Modifier.zIndex.
Belangrijkste punten
Box — is een composable-functie die onderliggende elementen in één gebied plaatst en ze bovenop elkaar stapelt. Het eerste onderliggende element wordt onderaan getekend, het laatste — bovenaan. Standaard past Box zich aan de grootte van het grootste onderliggende element aan.
In tegenstelling tot Row en Column rangschikt Box elementen niet sequentieel — alle onderliggende elementen bezetten hetzelfde gebied en kunnen elkaar overlappen. Dit maakt Box onmisbaar voor het samenstellen van interfacelagen.
De grootte van Box wordt bepaald door de regel: als geen enkel onderliggend element een vaste grootte heeft, krimpt Box tot de minimale grootte. Als ten minste één onderliggend element Modifier.fillMaxSize heeft, breidt Box zich uit tot de maximale grootte.
Volgens Android Developers Blog, 2024 is Box de meest efficiënte container in Compose voor gevallen waarin elementen geen sequentiële rangschikking vereisen. Box voert geen extra metingen uit voor positionering, in tegenstelling tot Row en Column.
Box accepteert de parameters modifier, contentAlignment en propagateMinConstraints. Alle onderliggende elementen worden doorgegeven in het content-blok, waar elk zijn eigen modifiers kan hebben.
@Composable
fun BoxExample() {
Box(
modifier = Modifier.size(200.dp),
contentAlignment = Alignment.Center
) {
Box(
modifier = Modifier.fillMaxSize().background(Color.Blue)
)
Text(
text = "Hallo",
color = Color.White
)
}
}
contentAlignment — is een parameter van Box die de standaarduitlijning voor alle onderliggende elementen bepaalt. Indien niet opgegeven, wordt Alignment.TopStart gebruikt — elementen worden in de linkerbovenhoek van de container geplaatst.
Modifier.align maakt het mogelijk de uitlijning voor een specifiek onderliggend element te wijzigen, onafhankelijk van contentAlignment. Bijvoorbeeld, Box met Alignment.Center kan een element bevatten met Modifier.align(Alignment.BottomEnd) dat naar de rechteronderhoek wordt gedrukt.
Volgens Material Design Guidelines, 2025 is Modifier.align nuttig voor het positioneren van badges en pictogrammen boven achtergrondafbeeldingen. Het maakt het mogelijk een algemene uitlijning voor de volledige inhoud van Box in te stellen en deze voor individuele elementen te overschrijven.
| Waarde | Positie in Box | Toepassingsvoorbeeld |
|---|---|---|
| TopStart | Linkerbovenhoek | Pictogram in de hoek van een kaart |
| TopCenter | Bovenste midden | Titel boven afbeelding |
| Center | Midden van container | Tekst gecentreerd op achtergrond |
| BottomEnd | Rechteronderhoek | Meldingsnummer op pictogram |
| BottomCenter | Onderste midden | Onderschrift onder afbeelding |
In dit voorbeeld bevat Box een achtergrondafbeelding en een badge in de rechteronderhoek. Modifier.align(BottomEnd) plaatst de badge onafhankelijk van de contentAlignment van de hele Box.
@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)
)
}
}
Modifier.zIndex beheert de tekenvolgorde van elementen binnen Box. Standaard worden elementen getekend in de volgorde van declaratie — het eerste element onderaan, het laatste bovenaan. zIndex wijzigt deze volgorde.
Een element met zIndex 2.0f wordt getekend boven een element met zIndex 1.0f, ongeacht hun volgorde in de code. Negatieve zIndex-waarden plaatsen het element lager dan de rest. Volgens Android Developers, 2024 beïnvloedt zIndex alleen de tekenvolgorde, niet de verwerking van aanraakgebeurtenissen.
zIndex is vooral nuttig in animaties en draggable componenten, waar een element tijdelijk boven de andere moet worden geheven. Bijvoorbeeld, tijdens het slepen van een kaart wordt de zIndex verhoogd om te voorkomen dat deze wordt bedekt door aangrenzende elementen.
@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))
}
}
Box wordt veel gebruikt voor het plaatsen van tekst over een afbeelding. De achtergrondafbeelding wordt eerst geplaatst, daarna tekst met Modifier.align voor positionering boven de achtergrond.
@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 = "Titel",
color = Color.White,
modifier = Modifier.align(Alignment.BottomStart)
.padding(16.dp)
)
}
}
Het tweede voorbeeld — Box voor het maken van een laadindicator. Box beslaat het hele schermgebied en CircularProgressIndicator wordt gecentreerd via contentAlignment.
@Composable
fun LoadingOverlay() {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
CircularProgressIndicator(
modifier = Modifier.size(48.dp)
)
}
}
Box past zich standaard aan de grootte van de inhoud aan. Als onderliggende elementen verschillende groottes hebben, neemt Box de grootte van het grootste element aan. Bij afwezigheid van onderliggende elementen krimpt Box tot de minimale grootte.
Modifier.clipToBounds beperkt het tekenen van onderliggende elementen tot de grenzen van Box. Zonder deze modifier kunnen onderliggende elementen buiten Box vallen. Volgens Material Design Guidelines, 2025 is clipToBounds verplicht bij gebruik van Modifier.scale of Modifier.graphicsLayer binnen Box.
propagateMinConstraints — is een parameter van Box die minimale afmetingsbeperkingen doorgeeft aan onderliggende elementen. Indien ingesteld op true, kunnen onderliggende elementen niet kleiner zijn dan de minimale grootte van Box. Dit gedrag is belangrijk bij het maken van aangepaste containers met vaste minimale afmetingen.
Veelgestelde vragen
Box stapelt elementen bovenop elkaar, terwijl Row en Column ze sequentieel rangschikken. Box is geschikt voor lagen en overlappingen, Row — voor horizontale rijen, Column — voor verticale lijsten.
Gebruik Modifier.align voor het specifieke onderliggende element. Deze modifier overschrijft de contentAlignment die voor de hele Box is ingesteld. Bijvoorbeeld, Modifier.align(Alignment.BottomEnd) drukt het element naar de rechteronderhoek.
Stel Box in met Modifier.size en Modifier.background, en zet contentAlignment op Alignment.Center. De tekst binnen Box wordt automatisch gecentreerd zonder extra modifiers.
propagateMinConstraints geeft de minimale afmetingsbeperkingen van Box door aan onderliggende elementen. Bij true kunnen onderliggende elementen niet kleiner zijn dan de minimale grootte die voor Box is ingesteld via Modifier.size of Modifier.constrain.
De declaratievolgorde van elementen in Box bepaalt hun visuele volgorde: eerste element onderaan, laatste — bovenaan. Voor fijnafstemming gebruikt u Modifier.zIndex — het element met de hoogste waarde wordt boven de rest getekend.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook