Scaffold a Jetpack Compose-ban — mi ez, tulajdonságai és hogyan működik

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

Scaffold — egy composable függvény a Jetpack Compose-ban, amely a Material Design specifikáció szerint valósítja meg a képernyő alapvető szerkezetét. A Scaffold slotokat biztosít a TopAppBar, BottomBar, FloatingActionButton, Drawer és Snackbar számára. A Google Android Documentation, 2025 szerint a Scaffold kötelező eleme a legtöbb képernyőnek a Compose alkalmazásokban, mivel kezeli a Material Design rendszerkomponenseinek távolságait.

Főbb pontok

  • Scaffold — Material Design képernyőkeret, amely slotokat biztosít a TopAppBar, BottomBar, FAB, Drawer és Snackbar számára megfelelő távolságokkal.
  • ScaffoldState kezeli a Drawer és Snackbar állapotát, biztosítva az oldalsáv megnyitását és bezárását és az értesítések megjelenítését.
  • topBar, bottomBar és floatingActionButton — Scaffold slotok a szabványos Material Design komponensek integrálásához.
  • drawerGesturesEnabled kezeli az oldalsáv mozdulattal történő megnyitását, a snackbarHost pedig a Snackbar egyéni megjelenítését.
  • Scaffold automatikusan kezeli az állapotsor és navigációs panel távolságait az innerPadding segítségével.

Mi az a Scaffold a Jetpack Compose-ban

Scaffold — egy composable függvény, amely a képernyőkeretet valósítja meg a Material Design specifikáció szerint. A Scaffold nem egy konténer a hagyományos értelemben — ez egy elrendezéskezelő, amely több szabványos Material komponens elhelyezését koordinálja a képernyőn.

A Scaffold kezeli a távolságokat a TopAppBar, BottomBar és FloatingActionButton számára, valamint a rendszerelemeket — az állapotsort és a navigációs panelt. Ez garantálja, hogy a tartalom nem fedi át a rendszerelemeket, és megfelel a Material Design útmutatóinak.

A Material Design Guidelines, 2025 szerint a Scaffoldnak minden alkalmazási képernyő gyökérelemének kell lennie. Ez helyettesíti az elavult CoordinatorLayout-ot a View rendszerből, és egyszerűbb és deklaratívabb API-t biztosít a képernyőelrendezés építéséhez.

A Scaffold alap aláírása

Scaffold elfogadja a modifier, scaffoldState, topBar, bottomBar, floatingActionButton, drawerContent, snackbarHost és content paramétereket. A content paraméter PaddingValues értékeket kap — a távolságokat, amelyeket a fő tartalomnak figyelembe kell vennie.

kotlin
@Composable
fun BasicScaffold() {
    Scaffold(
        topBar = {
            TopAppBar(
                title = { Text("Kezdőlap") }
            )
        },
        floatingActionButton = {
            FloatingActionButton(onClick = {}) {
                Icon(Icons.Default.Add, contentDescription = "Add")
            }
        }
    ) { innerPadding ->
        Column(
            modifier = Modifier.padding(innerPadding)
        ) {
            Text("Fő tartalom")
        }
    }
}

Scaffold slotok: topBar, bottomBar és floatingActionButton

topBar — slot az alkalmazás felső paneljének elhelyezésére, általában TopAppBar vagy LargeTopAppBar. A Scaffold automatikusan hozzáad egy távolságot az innerPaddinghez a tartalom számára, hogy az ne fedje a topBar-t. A TopAppBar tartalmazhat címet, navigációs ikont és műveleteket.

bottomBar — slot az alsó navigációs panel számára. Támogatja a BottomNavigation, BottomAppBar és NavigationBar elemeket. A Scaffold figyelembe veszi a bottomBar magasságát az innerPadding kiszámításakor a tartalom számára. A Material Design Guidelines, 2025 szerint a bottomBar-t 3–5 navigációs ponttal rendelkező képernyőkön kell használni.

floatingActionButton — slot az lebegő művelet gomb számára. A Scaffold automatikusan pozícionálja a FAB-ot a Material Design specifikáció szerint — a jobb alsó sarokban megfelelő távolsággal. A floatingActionButtonPosition lehetővé teszi a FAB áthelyezését a képernyő alsó szélének közepére.

Példa az összes slot használatával

Ebben a példában a Scaffold az összes fő slotot használja: TopAppBar címmel, BottomBar három navigációs elemmel és FloatingActionButton a fő művelethez.

kotlin
@Composable
fun FullScaffold() {
    Scaffold(
        topBar = {
            TopAppBar(
                title = { Text("Alkalmazás") },
                navigationIcon = {
                    IconButton(onClick = {}) {
                        Icon(Icons.Default.Menu, "Menu")
                    }
                }
            )
        },
        bottomBar = {
            NavigationBar {
                NavigationBarItem(
                    icon = { Icon(Icons.Default.Home, "Kezdőlap") },
                    label = { Text("Home") },
                    selected = true,
                    onClick = {}
                )
                NavigationBarItem(
                    icon = { Icon(Icons.Default.Search, "Keresés") },
                    label = { Text("Search") },
                    selected = false,
                    onClick = {}
                )
            }
        },
        floatingActionButton = {
            FloatingActionButton(onClick = {}) {
                Icon(Icons.Default.Add, "Add")
            }
        }
    ) { innerPadding ->
        Box(modifier = Modifier.padding(innerPadding)) {
            Text("Képernyő tartalom")
        }
    }
}

ScaffoldState: a Drawer és Snackbar kezelése

ScaffoldState — a Scaffold állapotobjektuma, amely összekapcsolja a DrawerState és SnackbarHostState elemeket. A DrawerState az oldalsáv megnyitását és bezárását, a SnackbarHostState pedig a Snackbar megjelenítését és elrejtését kezeli. Az állapot a rememberScaffoldState() segítségével jön létre, és a scaffoldState paraméternek kerül átadásra.

DrawerState open és close metódusokat biztosít a Drawer programozott kezeléséhez. A Drawer állapota lehet nyitott, zárt vagy részben nyitott. A drawerGesturesEnabled lehetővé teszi a Drawer húzással történő megnyitásának letiltását, csak a gombos programozott megnyitást hagyva meg.

SnackbarHostState kezeli a Snackbar-t — ideiglenes értesítéseket a képernyő alsó részén. A showSnackbar metódus megjeleníti a Snackbar-t üzenettel és opcionális művelettel. A Material Design Guidelines, 2025 szerint a Snackbar-t rövid üzenetekhez kell használni kritikus fontosságú információ nélkül.

kotlin
@Composable
fun ScaffoldWithDrawer() {
    val scaffoldState = rememberScaffoldState()
    val scope = rememberCoroutineScope()

    Scaffold(
        scaffoldState = scaffoldState,
        topBar = {
            TopAppBar(
                title = { Text("Menü") },
                navigationIcon = {
                    IconButton(onClick = {
                        scope.launch {
                            scaffoldState.drawerState.open()
                        }
                    }) {
                        Icon(Icons.Default.Menu, "Menu")
                    }
                }
            )
        },
        drawerContent = {
            Column(modifier = Modifier.padding(16.dp)) {
                Text("1. elem")
                Text("2. elem")
            }
        }
    ) { innerPadding ->
        Box(modifier = Modifier.padding(innerPadding)) {
            Text("Tartalom")
        }
    }
}

Példa képernyő építésére Scaffolddal

Egy teljes képernyőpélda a Scaffold használatával magában foglalja a TopAppBar, BottomNavigation, FloatingActionButton és Snackbar elemeket az értesítések megjelenítéséhez a FAB megnyomásakor. A ScaffoldState minden komponensnek átadásra kerül az állapot összehangolásához.

kotlin
@Composable
fun MainScreen() {
    val state = rememberScaffoldState()
    val scope = rememberCoroutineScope()

    Scaffold(
        scaffoldState = state,
        topBar = {
            TopAppBar(
                title = { Text("IT Sectr") },
                actions = {
                    IconButton(onClick = {}) {
                        Icon(Icons.Default.Notifications, "Notifications")
                    }
                }
            )
        },
        bottomBar = {
            NavigationBar {
                NavigationBarItem(icon = { Icon(Icons.Default.Home, "Kezdőlap") },
                    label = { Text("Home") }, selected = true, onClick = {})
                NavigationBarItem(icon = { Icon(Icons.Default.Settings, "Beállítások") },
                    label = { Text("Settings") }, selected = false, onClick = {})
            }
        },
        floatingActionButton = {
            FloatingActionButton(onClick = {
                scope.launch {
                    state.snackbarHostState.showSnackbar("Kész")
                }
            }) {
                Icon(Icons.Default.Add, "Add")
            }
        }
    ) { padding ->
        Box(
            modifier = Modifier.padding(padding).fillMaxSize(),
            contentAlignment = Alignment.Center
        ) {
            Text("Üdvözöljük")
        }
    }
}

InnerPadding és adaptív layout Scaffolddal

innerPadding — PaddingValues értékek, amelyeket a Scaffold a content blokknak továbbít. Ezek tartalmazzák a szükséges távolságokat, hogy a tartalom ne fedje át a statusBar, navigationBar, topBar és bottomBar elemeket. Az innerPadding használata kötelező a különböző eszközökön történő helyes megjelenítéshez.

A Scaffold automatikusan kiszámítja az innerPadding értékét a rendszer távolságai és a telepített slotok magassága alapján. Kameraszigettel vagy kivágással rendelkező eszközökön a Scaffold igazítja az állapotsor távolságait. A fizikai gombokkal rendelkező régebbi eszközökön az alsó távolság nulla lehet.

A Android Developers, 2024 szerint az innerPadding-et a tartalom gyökérkonténerére kell alkalmazni a Modifier.padding(innerPadding) segítségével. Ha a tartalom görgethető konténert használ, az innerPadding a Modifier.consumeWindowInsets segítségével kerül alkalmazásra a billentyűzet és a rendszermozdulatok helyes működéséhez.

  • Alkalmazza az innerPadding-et a tartalom gyökérkonténerére a Modifier.padding(innerPadding) segítségével
  • Görgethető konténerekhez használja a Modifier.consumeWindowInsets(innerPadding) elemet
  • Ne adjon hozzá további távolságokat az állapotsor számára — a Scaffold ezt automatikusan megteszi
  • topBar vagy bottomBar hiányában a megfelelő távolságok az innerPadding-ben nullák lesznek

Gyakran ismételt kérdések

Miben különbözik a Scaffold a szokásos Column-tól vagy Box-tól?

Scaffold nem konténer, hanem elrendezéskezelő, amely a TopAppBar, BottomBar, FAB, Drawer és Snackbar slotjait kezeli, és automatikusan feldolgozza a rendszerkomponensek távolságait. A Column és Box csak elhelyezi az elemeket a Material Design figyelembevétele nélkül.

Kötelező a Scaffold használata minden képernyőn?

Scaffold ajánlott a Material Design komponenseket használó képernyőkhöz. Az egyszerű, TopAppBar, BottomBar vagy FAB nélküli képernyőkön a Scaffold nem kötelező, de biztosítja a helyes rendszer távolságokat az innerPadding segítségével, ami még slotok nélkül is hasznos.

Hogyan jeleníthetek meg Snackbar-t a Scaffold segítségével?

Adja át a ScaffoldState elemet a Scaffold scaffoldState paraméterének, majd hívja meg a state.snackbarHostState.showSnackbar(„Üzenet”) metódust egy coroutine-ban. A Scaffold automatikusan megjeleníti a Snackbar-t a képernyő alsó részén.

Használhatom a Scaffold-ot scaffoldState nélkül?

Igen, a Scaffold alapértelmezett belső állapotot hoz létre, ha a scaffoldState nincs átadva. Azonban a Drawer és Snackbar programozott kezeléséhez létre kell hoznia és át kell adnia a ScaffoldState elemet a rememberScaffoldState() segítségével.

Hogyan változtathatom meg a FloatingActionButton pozícióját a Scaffold-ban?

Használja a Scaffold floatingActionButtonPosition paraméterét. Alapértelmezés szerint a FAB a jobb alsó sarokban található (FabPosition.End). állítsa be a FabPosition.Center értéket a FAB képernyő alsó szélének közepére történő helyezéséhez.

Összefoglaló

  • Scaffold — Material Design képernyőkeret a TopAppBar, BottomBar, FAB, Drawer és Snackbar slotjainak kezelésével és automatikus rendszer távolságokkal.
  • topBar, bottomBar és floatingActionButton — Scaffold slotok a szabványos komponensek integrálásához helyes pozícionálással.
  • ScaffoldState összekapcsolja a DrawerState és SnackbarHostState elemeket, programozott kezelést biztosítva az oldalsáv és értesítések számára coroutine-ok segítségével.
  • innerPadding — a content blokk kötelező paramétere, amely a rendszerelemek és a telepített Scaffold slotok távolságait tartalmazza.
  • drawerGesturesEnabled és floatingActionButtonPosition — további paraméterek a Scaffold viselkedésének finomhangolásához.
  • Scaffold automatikusan feldolgozza az állapotsor és navigációs panel távolságait a különböző képernyőkonfigurációjú eszközökön.
  • Material komponensek nélküli egyszerű képernyőkön a Scaffold nem kötelező, de gyökérelemként ajánlott a rendszer távolságok helyes működéséhez.

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