Paski aplikacji

Paski aplikacji to kontenery, które zapewniają użytkownikowi dostęp do kluczowych funkcji i elementów nawigacyjnych. Istnieją dwa rodzaje pasków aplikacji: górne i dolne. Ich wygląd i przeznaczenie są następujące:

Typ

Wygląd

Cel

Górny pasek aplikacji

U góry ekranu.

Zapewnia dostęp do kluczowych zadań i informacji. Zasadniczo hostuje tytuł, podstawowe działania i określone elementy nawigacyjne.

Dolny pasek aplikacji

Na dole ekranu.

Zwykle zawiera podstawowe elementy nawigacyjne. Może też umożliwiać dostęp do innych kluczowych działań, takich jak pływający przycisk polecenia.

Przykład górnego i dolnego paska aplikacji.
Rysunek 1. Pasek aplikacji u góry (po lewej) i u dołu (po prawej).

Aby zaimplementować pasek aplikacji u góry i na dole, użyj odpowiednio funkcji kompozycyjnych TopAppBar i BottomAppBar. Umożliwiają one tworzenie spójnych interfejsów z nawigacją i elementami sterującymi działaniami, zgodnych z zasadami Material Design.

Najlepsze paski aplikacji

W tabeli poniżej opisujemy 4 typy pasków najpopularniejszych aplikacji:

Typ

Przykład

Mały: dotyczy ekranów, które nie wymagają nawigacji ani wykonywania wielu czynności.

Mały górny pasek aplikacji

Wyśrodkowane: w przypadku ekranów z 1 głównym działaniem.

Wyśrodkowany górny pasek aplikacji

Średnia: dotyczy ekranów, które wymagają umiarkowanej nawigacji i wymagających działań.

Średni górny pasek aplikacji

Duży: do wyświetlania na ekranach, które wymagają intensywnej nawigacji i dużych działań.

Duży pasek u góry aplikacji

Interfejs API

Różne funkcje kompozycyjne, które umożliwiają implementowanie 4 górnych pasków aplikacji, są dość podobne. Mają one kilka kluczowych parametrów:

  • title: tekst wyświetlany na pasku aplikacji.
  • navigationIcon: główna ikona nawigacji. wyświetla się po lewej stronie paska aplikacji.
  • actions: ikony zapewniające użytkownikowi dostęp do najważniejszych działań. Pojawiają się po prawej stronie paska aplikacji.
  • scrollBehavior: określa, jak górny pasek aplikacji reaguje na przewijanie wewnętrznej zawartości scaffold.
  • colors: określa sposób wyświetlania paska aplikacji.

Zachowanie podczas przewijania

Możesz określić, jak pasek aplikacji reaguje, gdy użytkownik przewinie wewnętrzną zawartość danego scaffold. Aby to zrobić, utwórz instancję TopAppBarScrollBehavior i przekaż ją na górny pasek aplikacji jako parametr scrollBehavior.

Są 3 rodzaje wartości TopAppBarScrollBehavior. Są one następujące:

  • enterAlwaysScrollBehavior: gdy użytkownik otworzy wewnętrzną zawartość scaffold, zwija się górny pasek aplikacji. Pasek aplikacji rozwija się, gdy użytkownik wyciągnie wewnętrzną zawartość.
  • exitUntilCollapsedScrollBehavior: podobnie jak w przypadku enterAlwaysScrollBehavior, jednak pasek aplikacji dodatkowo się rozwija, gdy użytkownik dotrze do końca wewnętrznej zawartości scaffold.
  • pinnedScrollBehavior: pasek aplikacji pozostaje na swoim miejscu i nie reaguje na przewijanie.

W podanych niżej przykładach zastosowano kilka z tych opcji.

Przykłady

W kolejnych sekcjach znajdziesz implementacje 4 różnych typów pasków widocznych na górze aplikacji, w tym różne przykłady kontrolowania działania przewijania.

Mały

Aby utworzyć mały pasek aplikacji u góry, użyj funkcji kompozycyjnej TopAppBar. To najprostszy z możliwych sposobów na górny pasek aplikacji. W tym przykładzie zawiera on tylko tytuł.

Ten przykład nie przekazuje TopAppBar wartości dla scrollBehavior i dlatego nie reaguje na przewijanie zawartości wewnętrznej.

@Composable
fun SmallTopAppBarExample() {
    Scaffold(
        topBar = {
            TopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text("Small Top App Bar")
                }
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

Implementacja wygląda tak:

Przykład małego paska aplikacji u góry.
Rysunek 2. Mały pasek aplikacji na górze.

Wyśrodkowano

Wyśrodkowany górny pasek aplikacji przypomina mały pasek aplikacji, ale tytuł jest wyśrodkowany w obrębie komponentu. Aby go wdrożyć, użyj dedykowanego elementu kompozycyjnego CenterAlignedTopAppBar.

W tym przykładzie używany jest mechanizm enterAlwaysScrollBehavior(), który pobiera wartość dla funkcji scrollBehavior. W związku z tym pasek zwija się, gdy użytkownik przewinie wewnętrzną zawartość rusztowania.

@Composable
fun CenterAlignedTopAppBarExample() {
    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())

    Scaffold(
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),

        topBar = {
            CenterAlignedTopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text(
                        "Centered Top App Bar",
                        maxLines = 1,
                        overflow = TextOverflow.Ellipsis
                    )
                },
                navigationIcon = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.ArrowBack,
                            contentDescription = "Localized description"
                        )
                    }
                },
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.Menu,
                            contentDescription = "Localized description"
                        )
                    }
                },
                scrollBehavior = scrollBehavior,
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

Implementacja wygląda tak:

Tutaj wpisz tekst alternatywny
Rysunek 3. Wyśrodkowany górny pasek aplikacji.

Medium

Na średnim pasku aplikacji umieszcza się tytuł pod dodatkowymi ikonami. Aby go utworzyć, użyj funkcji kompozycyjnej MediumTopAppBar.

Podobnie jak w poprzednim fragmencie, ten przykład używa funkcji enterAlwaysScrollBehavior() do pobrania wartości przekazywanej dla parametru scrollBehavior.

@Composable
fun MediumTopAppBarExample() {
    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState())

    Scaffold(
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
        topBar = {
            MediumTopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text(
                        "Medium Top App Bar",
                        maxLines = 1,
                        overflow = TextOverflow.Ellipsis
                    )
                },
                navigationIcon = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.ArrowBack,
                            contentDescription = "Localized description"
                        )
                    }
                },
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.Menu,
                            contentDescription = "Localized description"
                        )
                    }
                },
                scrollBehavior = scrollBehavior
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

Implementacja wygląda tak z przykładem działania przewijania z enterAlwaysScrollBehavior():

Rysunek 4. Wyśrodkowany górny pasek aplikacji.

Duży

Duży pasek aplikacji u góry jest podobny do medium, ale dopełnienie między tytułem a ikonami jest większe i zajmuje więcej miejsca na ekranie. Aby go utworzyć, użyj funkcji kompozycyjnej LargeTopAppBar.

W przeciwieństwie do poprzednich fragmentów kodu w tym przykładzie użyto parametru exitUntilCollapsedScrollBehavior() do pobrania wartości przekazywanej dla parametru scrollBehavior. W związku z tym pasek zwija się, gdy użytkownik przewinie wewnętrzną zawartość scaffold, ale potem rozwija się, gdy użytkownik przewinie stronę na koniec.

@Composable
fun LargeTopAppBarExample() {
    val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())

    Scaffold(
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
        topBar = {
            LargeTopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text(
                        "Large Top App Bar",
                        maxLines = 1,
                        overflow = TextOverflow.Ellipsis
                    )
                },
                navigationIcon = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.ArrowBack,
                            contentDescription = "Localized description"
                        )
                    }
                },
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.Menu,
                            contentDescription = "Localized description"
                        )
                    }
                },
                scrollBehavior = scrollBehavior
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

Implementacja wygląda tak:

Ekran aplikacji z dolnym paskiem aplikacji po lewej stronie z ikonami działań, a po prawej – pływającym przyciskiem polecenia.
Rysunek 5. Przykład implementacji dużego paska aplikacji u góry strony.

Dolny pasek aplikacji

Aby utworzyć dolny pasek aplikacji, użyj funkcji kompozycyjnej BottomAppBar. Korzystanie z tego elementu kompozycyjnego jest bardzo podobne do opisanych w poprzednich sekcjach tej strony na najpopularniejszych elementach kompozycyjnych na pasku aplikacji. Przekazujesz elementy kompozycyjne dla tych parametrów kluczowych:

  • actions: seria ikon po lewej stronie paska. Są to zwykle kluczowe działania na danym ekranie lub elementy nawigacji.
  • floatingActionButton: pływający przycisk polecenia wyświetlany po prawej stronie paska.

@Composable
fun BottomAppBarExample() {
    Scaffold(
        bottomBar = {
            BottomAppBar(
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(Icons.Filled.Check, contentDescription = "Localized description")
                    }
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            Icons.Filled.Edit,
                            contentDescription = "Localized description",
                        )
                    }
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            Icons.Filled.Mic,
                            contentDescription = "Localized description",
                        )
                    }
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            Icons.Filled.Image,
                            contentDescription = "Localized description",
                        )
                    }
                },
                floatingActionButton = {
                    FloatingActionButton(
                        onClick = { /* do something */ },
                        containerColor = BottomAppBarDefaults.bottomAppBarFabColor,
                        elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation()
                    ) {
                        Icon(Icons.Filled.Add, "Localized description")
                    }
                }
            )
        },
    ) { innerPadding ->
        Text(
            modifier = Modifier.padding(innerPadding),
            text = "Example of a scaffold with a bottom app bar."
        )
    }
}

Implementacja wygląda tak:

Ekran aplikacji z dolnym paskiem aplikacji po lewej stronie z ikonami działań, a po prawej – pływającym przyciskiem polecenia.
Rysunek 6. Przykład implementacji paska aplikacji u dołu.

Dodatkowe materiały