Usa ventanas de información para agregar contexto a un botón o a otro elemento de la IU. Existen dos tipos de cuadros de información:
- Consignas de herramientas simples: Describen elementos o acciones de botones de íconos.
- Información sobre herramientas enriquecida: Proporciona más detalles, como describir el valor de una función. También puedes incluir un título, un vínculo y botones opcionales.

Plataforma de la API
Puedes usar el elemento componible TooltipBox
para implementar las indicaciones sobre herramientas en tu app. Controlas el aspecto de TooltipBox
con estos parámetros principales:
positionProvider
: Coloca la información sobre herramientas en relación con el contenido del ancla. Por lo general, usas un proveedor de posición predeterminado deTooltipDefaults
, o bien puedes proporcionar el tuyo si necesitas una lógica de posicionamiento personalizada.tooltip
: Es el elemento componible que contiene el contenido de la información sobre herramientas. Por lo general, usas los elementos componiblesPlainTooltip
oRichTooltip
.- Usa
PlainTooltip
para describir elementos o acciones de botones de íconos. - Usa
RichTooltip
para proporcionar más detalles, como describir el valor de una función. Las ventanas de información enriquecidas pueden incluir un título, un vínculo y botones opcionales.
- Usa
state
: Es el contenedor de estado que contiene la lógica de la IU y el estado del elemento para esta información sobre herramientas.content
: Es el contenido componible al que está anclada la información sobre herramientas.
Cómo mostrar una información sobre la herramienta sin formato
Usa una información sobre herramientas simple para describir brevemente un elemento de la IU. En este fragmento de código, se muestra una información sobre herramientas simple sobre un botón de ícono con la etiqueta “Agregar a favoritos”:
@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" ) } } }
Puntos clave sobre el código
TooltipBox
genera una información sobre la herramienta simple con el texto "Agregar a favoritos".TooltipDefaults.rememberPlainTooltipPositionProvider()
proporciona el posicionamiento predeterminado para las indicaciones sobre herramientas sin formato.tooltip
es una función lambda que define el contenido de la información sobre herramientas con el elemento componiblePlainTooltip
.Text(plainTooltipText)
muestra el texto dentro de la información sobre la herramienta.tooltipState
controla el estado de la información sobre herramientas.
IconButton
crea un botón en el que se puede hacer clic con un ícono.Icon(...)
muestra un ícono de corazón dentro del botón.- Cuando un usuario interactúa con
IconButton
, se muestra la información sobre herramientas con el texto “Agregar a favoritos”. Según el dispositivo, los usuarios pueden activar la información sobre herramientas de las siguientes maneras: - Colocar el cursor sobre el ícono
- Mantener presionado el ícono en un dispositivo móvil
Resultado
En este ejemplo, se produce un cuadro de información simple sobre un ícono:

Cómo mostrar un cuadro de información enriquecido
Usa una información sobre herramientas enriquecida para proporcionar contexto adicional sobre un elemento de la IU. En este ejemplo, se crea una información sobre herramientas enriquecida de varias líneas con un título anclado a un 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" ) } } }
Puntos clave sobre el código
TooltipBox
controla los objetos de escucha de eventos para las interacciones del usuario y actualizaTooltipState
según corresponda. CuandoTooltipState
indica que se debe mostrar la información sobre la herramienta, se ejecuta la lambda de la información sobre la herramienta y se muestraRichTooltip
. ElTooltipBox
actúa como ancla y contenedor del contenido y la información sobre herramientas.- En este caso, el contenido es un componente
IconButton
, que proporciona el comportamiento de acción que se puede presionar. Cuando se mantenga presionada la pantalla (en dispositivos táctiles) o se coloque el cursor (como con el puntero del mouse) sobre cualquier parte del contenido deTooltipBox
, se mostrará la información sobre herramientas para mostrar más información.
- En este caso, el contenido es un componente
- El elemento componible
RichTooltip
define el contenido de la información sobre herramientas, incluido el título y el texto del cuerpo.TooltipDefaults.rememberRichTooltipPositionProvider()
proporciona información de posicionamiento para las herramientas de ayuda enriquecidas.
Resultado
En este ejemplo, se produce una información sobre herramientas enriquecida con un título adjunto a un ícono de información:

Cómo personalizar una información sobre herramientas enriquecida
Este fragmento de código muestra una información sobre herramientas enriquecida con un título, acciones personalizadas y una virgulilla (flecha) personalizada que se muestra sobre un botón de ícono de cámara:
@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) } } }, caretSize = DpSize(32.dp, 16.dp) ) { Text(richTooltipText) } }, state = tooltipState ) { IconButton(onClick = { coroutineScope.launch { tooltipState.show() } }) { Icon( imageVector = Icons.Filled.Camera, contentDescription = "Open camera" ) } } }
Puntos clave sobre el código
- Un
RichToolTip
muestra una información sobre herramientas con un título y una acción para descartar. - Cuando se activa, ya sea con una presión prolongada o colocando el cursor del mouse sobre el contenido de
ToolTipBox
, la información sobre la herramienta se muestra durante aproximadamente un segundo. Para descartar esta información sobre herramientas, presiona en otro lugar de la pantalla o usa el botón de acción para descartar. - Cuando se ejecuta la acción de descartar, se inicia una corrutina para llamar a
tooltipState.dismiss
. Esto garantiza que la ejecución de la acción no se bloquee mientras se muestra la información sobre herramientas. onClick = coroutineScope.launch { tooltipState.show() } }
inicia una corrutina para mostrar la información sobre herramientas de forma manual contooltipState.show
.- El parámetro
action
permite agregar elementos interactivos a una tooltip, como un botón. - El parámetro
caretSize
modifica el tamaño de la flecha de la información sobre herramientas.
Resultado
En este ejemplo, se produce lo siguiente:

Recursos adicionales
- Material Design: Consignas de herramientas