Вкладки

Вкладки позволяют организовывать группы связанного контента. Существует два типа вкладок:

  • Основные вкладки : размещаются в верхней части панели контента под верхней панелью приложений. Они отображают основные пункты назначения контента и должны использоваться, когда требуется только один набор вкладок.
  • Вторичные вкладки : используются в области контента для дальнейшего разделения связанного контента и установления иерархии. Они необходимы, когда экран требует более одного уровня вкладок.
Отображаются 3 основные вкладки с соответствующими значками (Рейсы, Поездки и Исследование). Отображаются 2 второстепенные вкладки (Обзор, Технические характеристики) без связанных значков.
Рисунок 1. Первичные вкладки (1) и вторичные вкладки (2).

На этой странице показано, как отображать основные вкладки в вашем приложении с соответствующими экранами и базовой навигацией.

API поверхность

Используйте Tab , PrimaryTabRow и SecondaryTabRow для реализации вкладок. Tab composable представляет отдельную вкладку в строке и обычно используется внутри PrimaryTabRow (для вкладок первичных индикаторов) или SecondaryTabRow (для вкладок вторичных индикаторов).

Tab включает в себя следующие основные параметры:

  • selected : определяет, будет ли текущая вкладка визуально выделена.
  • onClick() : обязательная лямбда-функция, которая определяет действие, которое будет выполнено, когда пользователь нажимает на вкладку. Здесь вы обычно обрабатываете события навигации, обновляете выбранное состояние вкладки или загружаете соответствующий контент.
  • text : Отображает текст на вкладке. Необязательно.
  • icon : Отображает значок на вкладке. Необязательно.
  • enabled : Управляет тем, включена ли вкладка и можно ли с ней взаимодействовать. Если установлено значение false, вкладка отображается в отключенном состоянии и не будет реагировать на щелчки.

Пример: навигация на основе вкладок

Следующий фрагмент реализует верхнюю панель навигации с вкладками для навигации между различными экранами в приложении:

@Composable
fun NavigationTabExample(modifier: Modifier = Modifier) {
    val navController = rememberNavController()
    val startDestination = Destination.SONGS
    var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }

    Scaffold(modifier = modifier) { contentPadding ->
        PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) {
            Destination.entries.forEachIndexed { index, destination ->
                Tab(
                    selected = selectedDestination == index,
                    onClick = {
                        navController.navigate(route = destination.route)
                        selectedDestination = index
                    },
                    text = {
                        Text(
                            text = destination.label,
                            maxLines = 2,
                            overflow = TextOverflow.Ellipsis
                        )
                    }
                )
            }
        }
        AppNavHost(navController, startDestination)
    }
}

Ключевые моменты

  • PrimaryTabRow отображает горизонтальный ряд вкладок, где каждая вкладка соответствует Destination .
  • val navController = rememberNavController() создает и запоминает экземпляр NavHostController , который управляет навигацией внутри NavHost .
  • var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } управляет состоянием текущей выбранной вкладки.
    • startDestination.ordinal получает числовой индекс (позицию) записи перечисления Destination.SONGS .
  • При нажатии на вкладку вызывается navController.navigate(route = destination.route) для перехода на соответствующий экран.
  • Лямбда-функция onClick Tab обновляет состояние selectedDestination , чтобы визуально выделить нажатую вкладку.
  • Он вызывает компонуемый объект AppNavHost , передавая navController и startDestination , для отображения фактического содержимого выбранного экрана.

Результат

На следующем изображении показан результат предыдущего фрагмента:

3 вкладки, расположенные горизонтально в верхней части экрана приложения. Вкладки — «Песни», «Альбом» и «Плейлист», при этом вкладка «Песни» выбрана и подчеркнута.
Рисунок 2. Три вкладки — «Песни», «Альбом» и «Плейлист», расположенные горизонтально.

Дополнительные ресурсы

,

Вкладки позволяют организовывать группы связанного контента. Существует два типа вкладок:

  • Основные вкладки : размещаются в верхней части панели контента под верхней панелью приложений. Они отображают основные пункты назначения контента и должны использоваться, когда требуется только один набор вкладок.
  • Вторичные вкладки : используются в области контента для дальнейшего разделения связанного контента и установления иерархии. Они необходимы, когда экран требует более одного уровня вкладок.
Отображаются 3 основные вкладки с соответствующими значками (Рейсы, Поездки и Исследование). Отображаются 2 второстепенные вкладки (Обзор, Технические характеристики) без связанных значков.
Рисунок 1. Первичные вкладки (1) и вторичные вкладки (2).

На этой странице показано, как отображать основные вкладки в вашем приложении с соответствующими экранами и базовой навигацией.

API поверхность

Используйте Tab , PrimaryTabRow и SecondaryTabRow для реализации вкладок. Tab composable представляет отдельную вкладку в строке и обычно используется внутри PrimaryTabRow (для вкладок первичных индикаторов) или SecondaryTabRow (для вкладок вторичных индикаторов).

Tab включает в себя следующие основные параметры:

  • selected : определяет, будет ли текущая вкладка визуально выделена.
  • onClick() : обязательная лямбда-функция, которая определяет действие, которое будет выполнено, когда пользователь нажимает на вкладку. Здесь вы обычно обрабатываете события навигации, обновляете выбранное состояние вкладки или загружаете соответствующий контент.
  • text : Отображает текст на вкладке. Необязательно.
  • icon : Отображает значок на вкладке. Необязательно.
  • enabled : Управляет тем, включена ли вкладка и можно ли с ней взаимодействовать. Если установлено значение false, вкладка отображается в отключенном состоянии и не будет реагировать на щелчки.

Пример: навигация на основе вкладок

Следующий фрагмент реализует верхнюю панель навигации с вкладками для навигации между различными экранами в приложении:

@Composable
fun NavigationTabExample(modifier: Modifier = Modifier) {
    val navController = rememberNavController()
    val startDestination = Destination.SONGS
    var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }

    Scaffold(modifier = modifier) { contentPadding ->
        PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) {
            Destination.entries.forEachIndexed { index, destination ->
                Tab(
                    selected = selectedDestination == index,
                    onClick = {
                        navController.navigate(route = destination.route)
                        selectedDestination = index
                    },
                    text = {
                        Text(
                            text = destination.label,
                            maxLines = 2,
                            overflow = TextOverflow.Ellipsis
                        )
                    }
                )
            }
        }
        AppNavHost(navController, startDestination)
    }
}

Ключевые моменты

  • PrimaryTabRow отображает горизонтальный ряд вкладок, где каждая вкладка соответствует Destination .
  • val navController = rememberNavController() создает и запоминает экземпляр NavHostController , который управляет навигацией внутри NavHost .
  • var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } управляет состоянием текущей выбранной вкладки.
    • startDestination.ordinal получает числовой индекс (позицию) записи перечисления Destination.SONGS .
  • При нажатии на вкладку вызывается navController.navigate(route = destination.route) для перехода на соответствующий экран.
  • Лямбда-функция onClick Tab обновляет состояние selectedDestination , чтобы визуально выделить нажатую вкладку.
  • Он вызывает компонуемый объект AppNavHost , передавая navController и startDestination , для отображения фактического содержимого выбранного экрана.

Результат

На следующем изображении показан результат предыдущего фрагмента:

3 вкладки, расположенные горизонтально в верхней части экрана приложения. Вкладки — «Песни», «Альбом» и «Плейлист», при этом вкладка «Песни» выбрана и подчеркнута.
Рисунок 2. Три вкладки — «Песни», «Альбом» и «Плейлист», расположенные горизонтально.

Дополнительные ресурсы

,

Вкладки позволяют организовывать группы связанного контента. Существует два типа вкладок:

  • Основные вкладки : размещаются в верхней части панели контента под верхней панелью приложений. Они отображают основные пункты назначения контента и должны использоваться, когда требуется только один набор вкладок.
  • Вторичные вкладки : используются в области контента для дальнейшего разделения связанного контента и установления иерархии. Они необходимы, когда экран требует более одного уровня вкладок.
Отображаются 3 основные вкладки с соответствующими значками (Рейсы, Поездки и Исследование). Отображаются 2 второстепенные вкладки (Обзор, Технические характеристики) без связанных значков.
Рисунок 1. Первичные вкладки (1) и вторичные вкладки (2).

На этой странице показано, как отображать основные вкладки в вашем приложении с соответствующими экранами и базовой навигацией.

API поверхность

Используйте Tab , PrimaryTabRow и SecondaryTabRow для реализации вкладок. Tab composable представляет отдельную вкладку в строке и обычно используется внутри PrimaryTabRow (для вкладок первичных индикаторов) или SecondaryTabRow (для вкладок вторичных индикаторов).

Tab включает в себя следующие основные параметры:

  • selected : определяет, будет ли текущая вкладка визуально выделена.
  • onClick() : обязательная лямбда-функция, которая определяет действие, которое будет выполнено, когда пользователь нажимает на вкладку. Здесь вы обычно обрабатываете события навигации, обновляете выбранное состояние вкладки или загружаете соответствующий контент.
  • text : Отображает текст на вкладке. Необязательно.
  • icon : Отображает значок на вкладке. Необязательно.
  • enabled : Управляет тем, включена ли вкладка и можно ли с ней взаимодействовать. Если установлено значение false, вкладка отображается в отключенном состоянии и не будет реагировать на щелчки.

Пример: навигация на основе вкладок

Следующий фрагмент реализует верхнюю панель навигации с вкладками для навигации между различными экранами в приложении:

@Composable
fun NavigationTabExample(modifier: Modifier = Modifier) {
    val navController = rememberNavController()
    val startDestination = Destination.SONGS
    var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }

    Scaffold(modifier = modifier) { contentPadding ->
        PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) {
            Destination.entries.forEachIndexed { index, destination ->
                Tab(
                    selected = selectedDestination == index,
                    onClick = {
                        navController.navigate(route = destination.route)
                        selectedDestination = index
                    },
                    text = {
                        Text(
                            text = destination.label,
                            maxLines = 2,
                            overflow = TextOverflow.Ellipsis
                        )
                    }
                )
            }
        }
        AppNavHost(navController, startDestination)
    }
}

Ключевые моменты

  • PrimaryTabRow отображает горизонтальный ряд вкладок, где каждая вкладка соответствует Destination .
  • val navController = rememberNavController() создает и запоминает экземпляр NavHostController , который управляет навигацией внутри NavHost .
  • var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } управляет состоянием текущей выбранной вкладки.
    • startDestination.ordinal получает числовой индекс (позицию) записи перечисления Destination.SONGS .
  • При нажатии на вкладку вызывается navController.navigate(route = destination.route) для перехода на соответствующий экран.
  • Лямбда-функция onClick Tab обновляет состояние selectedDestination , чтобы визуально выделить нажатую вкладку.
  • Он вызывает компонуемый объект AppNavHost , передавая navController и startDestination , для отображения фактического содержимого выбранного экрана.

Результат

На следующем изображении показан результат предыдущего фрагмента:

3 вкладки, расположенные горизонтально в верхней части экрана приложения. Вкладки — «Песни», «Альбом» и «Плейлист», при этом вкладка «Песни» выбрана и подчеркнута.
Рисунок 2. Три вкладки — «Песни», «Альбом» и «Плейлист», расположенные горизонтально.

Дополнительные ресурсы

,

Вкладки позволяют организовывать группы связанного контента. Существует два типа вкладок:

  • Основные вкладки : размещаются в верхней части панели контента под верхней панелью приложений. Они отображают основные пункты назначения контента и должны использоваться, когда требуется только один набор вкладок.
  • Вторичные вкладки : используются в области контента для дальнейшего разделения связанного контента и установления иерархии. Они необходимы, когда экран требует более одного уровня вкладок.
Отображаются 3 основные вкладки с соответствующими значками (Рейсы, Поездки и Исследование). Отображаются 2 второстепенные вкладки (Обзор, Технические характеристики) без связанных значков.
Рисунок 1. Первичные вкладки (1) и вторичные вкладки (2).

На этой странице показано, как отображать основные вкладки в вашем приложении с соответствующими экранами и базовой навигацией.

API поверхность

Используйте Tab , PrimaryTabRow и SecondaryTabRow для реализации вкладок. Tab composable представляет отдельную вкладку в строке и обычно используется внутри PrimaryTabRow (для вкладок первичных индикаторов) или SecondaryTabRow (для вкладок вторичных индикаторов).

Tab включает в себя следующие основные параметры:

  • selected : определяет, будет ли текущая вкладка визуально выделена.
  • onClick() : обязательная лямбда-функция, которая определяет действие, которое будет выполнено, когда пользователь нажимает на вкладку. Здесь вы обычно обрабатываете события навигации, обновляете выбранное состояние вкладки или загружаете соответствующий контент.
  • text : Отображает текст на вкладке. Необязательно.
  • icon : Отображает значок на вкладке. Необязательно.
  • enabled : Управляет тем, включена ли вкладка и можно ли с ней взаимодействовать. Если установлено значение false, вкладка отображается в отключенном состоянии и не будет реагировать на щелчки.

Пример: навигация на основе вкладок

Следующий фрагмент реализует верхнюю панель навигации с вкладками для навигации между различными экранами в приложении:

@Composable
fun NavigationTabExample(modifier: Modifier = Modifier) {
    val navController = rememberNavController()
    val startDestination = Destination.SONGS
    var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }

    Scaffold(modifier = modifier) { contentPadding ->
        PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) {
            Destination.entries.forEachIndexed { index, destination ->
                Tab(
                    selected = selectedDestination == index,
                    onClick = {
                        navController.navigate(route = destination.route)
                        selectedDestination = index
                    },
                    text = {
                        Text(
                            text = destination.label,
                            maxLines = 2,
                            overflow = TextOverflow.Ellipsis
                        )
                    }
                )
            }
        }
        AppNavHost(navController, startDestination)
    }
}

Ключевые моменты

  • PrimaryTabRow отображает горизонтальный ряд вкладок, где каждая вкладка соответствует Destination .
  • val navController = rememberNavController() создает и запоминает экземпляр NavHostController , который управляет навигацией внутри NavHost .
  • var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } управляет состоянием текущей выбранной вкладки.
    • startDestination.ordinal получает числовой индекс (позицию) записи перечисления Destination.SONGS .
  • При нажатии на вкладку вызывается navController.navigate(route = destination.route) для перехода на соответствующий экран.
  • Лямбда-функция onClick Tab обновляет состояние selectedDestination , чтобы визуально выделить нажатую вкладку.
  • Он вызывает компонуемый объект AppNavHost , передавая navController и startDestination , для отображения фактического содержимого выбранного экрана.

Результат

На следующем изображении показан результат предыдущего фрагмента:

3 вкладки, расположенные горизонтально в верхней части экрана приложения. Вкладки — «Песни», «Альбом» и «Плейлист», при этом вкладка «Песни» выбрана и подчеркнута.
Рисунок 2. Три вкладки — «Песни», «Альбом» и «Плейлист», расположенные горизонтально.

Дополнительные ресурсы