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

Поверхность API
Вы можете использовать компонент TooltipBox для реализации всплывающих подсказок в вашем приложении. Внешний вид TooltipBox управляется следующими основными параметрами:
-
positionProvider: Размещает всплывающую подсказку относительно содержимого привязки. Обычно используется поставщик позиционирования по умолчанию изTooltipDefaults, или вы можете предоставить свой собственный, если вам нужна пользовательская логика позиционирования. -
tooltip: Составной объект, содержащий содержимое всплывающей подсказки. Обычно используются либо составные объектыPlainTooltip, либоRichTooltip.- Используйте
PlainTooltipдля описания элементов или действий кнопок-значков. - Используйте
RichTooltipдля предоставления более подробной информации, например, для описания ценности функции. Вспомогательные всплывающие подсказки могут включать необязательный заголовок, ссылку и кнопки.
- Используйте
-
state: Объект состояния, содержащий логику пользовательского интерфейса и состояние элемента для этой всплывающей подсказки. -
content: Составляемое содержимое, к которому привязана всплывающая подсказка.
Отобразить простую всплывающую подсказку
Используйте простую всплывающую подсказку для краткого описания элемента пользовательского интерфейса. Этот фрагмент кода отображает простую всплывающую подсказку поверх кнопки-значка с надписью «Добавить в избранное»:
@Composable fun PlainTooltipExample( modifier: Modifier = Modifier, plainTooltipText: String = "Add to favorites" ) { TooltipBox( modifier = modifier, positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), tooltip = { PlainTooltip { Text(plainTooltipText) } }, state = rememberTooltipState() ) { IconButton(onClick = { /* Do something... */ }) { Icon( imageVector = Icons.Filled.Favorite, contentDescription = "Add to favorites" ) } } }
Основные моменты, касающиеся кода.
-
TooltipBoxгенерирует всплывающую подсказку с текстом «Добавить в избранное».-
TooltipDefaults.rememberPlainTooltipPositionProvider()обеспечивает позиционирование по умолчанию для простых всплывающих подсказок. -
tooltip— это лямбда-функция, которая определяет содержимое всплывающей подсказки с помощью составного объектаPlainTooltip. -
Text(plainTooltipText)отображает текст во всплывающей подсказке. -
tooltipStateуправляет состоянием всплывающей подсказки.
-
-
IconButtonсоздает кликабельную кнопку с иконкой.-
Icon(...)отображает значок сердца внутри кнопки. - Когда пользователь взаимодействует с
IconButton,TooltipBoxотображает всплывающую подсказку с текстом «Добавить в избранное». В зависимости от устройства, пользователи могут активировать всплывающую подсказку следующими способами: - Наведите курсор на значок.
- Длительное нажатие на значок на мобильном устройстве
-
Результат
В этом примере поверх значка отображается простая всплывающая подсказка:

Отобразить всплывающую подсказку с расширенными возможностями.
Используйте всплывающую подсказку с расширенным функционалом, чтобы предоставить дополнительную информацию об элементе пользовательского интерфейса. В этом примере создается многострочная всплывающая подсказка с заголовком, привязанным к Icon :
@Composable fun RichTooltipExample( modifier: Modifier = Modifier, richTooltipSubheadText: String = "Rich Tooltip", richTooltipText: String = "Rich tooltips support multiple lines of informational text." ) { TooltipBox( modifier = modifier, positionProvider = TooltipDefaults.rememberRichTooltipPositionProvider(), tooltip = { RichTooltip( title = { Text(richTooltipSubheadText) } ) { Text(richTooltipText) } }, state = rememberTooltipState() ) { IconButton(onClick = { /* Icon button's click event */ }) { Icon( imageVector = Icons.Filled.Info, contentDescription = "Show more information" ) } } }
Основные моменты, касающиеся кода.
-
TooltipBoxобрабатывает обработчики событий взаимодействия с пользователем и соответствующим образом обновляетTooltipState. КогдаTooltipStateуказывает на необходимость отображения всплывающей подсказки, выполняется лямбда-функция для отображения подсказки, иTooltipBoxотображаетRichTooltip.TooltipBoxвыступает в качестве привязки и контейнера как для контента, так и для всплывающей подсказки.- В данном случае контентом является компонент
IconButton, который обеспечивает поведение, связанное с нажатием. При длительном нажатии (на сенсорных устройствах) или наведении курсора мыши на любое место содержимогоTooltipBox, отобразится всплывающая подсказка, показывающая дополнительную информацию.
- В данном случае контентом является компонент
- Компонент
RichTooltipопределяет содержимое всплывающей подсказки, включая заголовок и основной текст.TooltipDefaults.rememberRichTooltipPositionProvider()предоставляет информацию о позиционировании для расширенных всплывающих подсказок.
Результат
В этом примере отображается всплывающая подсказка с заголовком, прикрепленным к информационному значку:

Настройте всплывающую подсказку с расширенными возможностями.
Этот фрагмент кода отображает всплывающую подсказку с заголовком, пользовательскими действиями и пользовательской стрелкой (каретом), расположенную поверх кнопки со значком камеры:
@Composable fun AdvancedRichTooltipExample( modifier: Modifier = Modifier, richTooltipSubheadText: String = "Custom Rich Tooltip", richTooltipText: String = "Rich tooltips support multiple lines of informational text.", richTooltipActionText: String = "Dismiss" ) { val tooltipState = rememberTooltipState() val coroutineScope = rememberCoroutineScope() TooltipBox( modifier = modifier, positionProvider = TooltipDefaults.rememberRichTooltipPositionProvider(), tooltip = { RichTooltip( title = { Text(richTooltipSubheadText) }, action = { Row { TextButton(onClick = { coroutineScope.launch { tooltipState.dismiss() } }) { Text(richTooltipActionText) } } }, ) { Text(richTooltipText) } }, state = tooltipState ) { IconButton(onClick = { coroutineScope.launch { tooltipState.show() } }) { Icon( imageVector = Icons.Filled.Camera, contentDescription = "Open camera" ) } } }
Основные моменты, касающиеся кода.
-
RichToolTipотображает всплывающую подсказку с заголовком и действием закрытия. - При активации (длительным нажатием или наведением указателя мыши на содержимое
ToolTipBox) всплывающая подсказка отображается примерно на одну секунду. Закрыть эту подсказку можно, коснувшись другого места на экране или используя кнопку закрытия. - Когда выполняется действие закрытия всплывающей подсказки, система запускает сопрограмму, которая вызывает метод
tooltipState.dismiss. Это позволяет убедиться, что выполнение действия не заблокировано во время отображения всплывающей подсказки. -
onClick = coroutineScope.launch { tooltipState.show() } }запускает сопрограмму для ручного отображения всплывающей подсказки с помощьюtooltipState.show. - Параметр
actionпозволяет добавлять в подсказку интерактивные элементы, например, кнопку. - Параметр
caretSizeизменяет размер стрелки во всплывающей подсказке.
Результат
В результате выполнения этого примера получается следующее:

Дополнительные ресурсы
- Материальный дизайн: всплывающие подсказки