Вкладки позволяют организовывать группы связанного контента. Существует два типа вкладок:
- Основные вкладки : размещаются в верхней части панели контента под верхней панелью приложений. Они отображают основные пункты назначения контента и должны использоваться, когда требуется только один набор вкладок.
- Вторичные вкладки : используются в области контента для дальнейшего разделения связанного контента и установления иерархии. Они необходимы, когда экран требует более одного уровня вкладок.

На этой странице показано, как отображать основные вкладки в вашем приложении с соответствующими экранами и базовой навигацией.
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
, для отображения фактического содержимого выбранного экрана.
Результат
На следующем изображении показан результат предыдущего фрагмента:
.png?hl=ru)
Дополнительные ресурсы
,Вкладки позволяют организовывать группы связанного контента. Существует два типа вкладок:
- Основные вкладки : размещаются в верхней части панели контента под верхней панелью приложений. Они отображают основные пункты назначения контента и должны использоваться, когда требуется только один набор вкладок.
- Вторичные вкладки : используются в области контента для дальнейшего разделения связанного контента и установления иерархии. Они необходимы, когда экран требует более одного уровня вкладок.

На этой странице показано, как отображать основные вкладки в вашем приложении с соответствующими экранами и базовой навигацией.
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
, для отображения фактического содержимого выбранного экрана.
Результат
На следующем изображении показан результат предыдущего фрагмента:
.png?hl=ru)
Дополнительные ресурсы
,Вкладки позволяют организовывать группы связанного контента. Существует два типа вкладок:
- Основные вкладки : размещаются в верхней части панели контента под верхней панелью приложений. Они отображают основные пункты назначения контента и должны использоваться, когда требуется только один набор вкладок.
- Вторичные вкладки : используются в области контента для дальнейшего разделения связанного контента и установления иерархии. Они необходимы, когда экран требует более одного уровня вкладок.

На этой странице показано, как отображать основные вкладки в вашем приложении с соответствующими экранами и базовой навигацией.
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
, для отображения фактического содержимого выбранного экрана.
Результат
На следующем изображении показан результат предыдущего фрагмента:
.png?hl=ru)
Дополнительные ресурсы
,Вкладки позволяют организовывать группы связанного контента. Существует два типа вкладок:
- Основные вкладки : размещаются в верхней части панели контента под верхней панелью приложений. Они отображают основные пункты назначения контента и должны использоваться, когда требуется только один набор вкладок.
- Вторичные вкладки : используются в области контента для дальнейшего разделения связанного контента и установления иерархии. Они необходимы, когда экран требует более одного уровня вкладок.

На этой странице показано, как отображать основные вкладки в вашем приложении с соответствующими экранами и базовой навигацией.
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
, для отображения фактического содержимого выбранного экрана.
Результат
На следующем изображении показан результат предыдущего фрагмента:
.png?hl=ru)