Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Utilizza le descrizioni comando per aggiungere contesto a un pulsante o a un altro elemento dell'interfaccia utente.
Esistono due tipi di descrizioni comando:
Descrizioni comando semplici: descrivono elementi o azioni dei pulsanti delle icone.
Descrizioni comando avanzate: forniscono maggiori dettagli, ad esempio descrivendo il valore di una funzionalità. Può anche includere un titolo, un link e dei pulsanti facoltativi.
Figura 1. Una descrizione comando semplice (1) e una descrizione comando avanzata (2).
Superficie API
Puoi utilizzare il composable TooltipBox per implementare i suggerimenti nella tua app.
Controlli l'aspetto di TooltipBox con questi parametri principali:
positionProvider: Posiziona la descrizione comando rispetto al contenuto di ancoraggio. In genere utilizzi un fornitore di posizioni predefinito da TooltipDefaults oppure puoi fornire il tuo se hai bisogno di una logica di posizionamento personalizzata.
tooltip: il composable che contiene i contenuti della descrizione comando. In genere, utilizzi i composable PlainTooltip o RichTooltip.
Utilizza PlainTooltip per descrivere elementi o azioni dei pulsanti con icone.
Utilizza RichTooltip per fornire maggiori dettagli, ad esempio descrivere il valore di una funzionalità. Le descrizioni comando avanzate possono includere un titolo, un link e pulsanti facoltativi.
state: il titolare dello stato che contiene la logica e lo stato degli elementi dell'interfaccia utente per
questo suggerimento.
content: il contenuto componibile a cui è ancorata la descrizione comando.
Visualizzare una descrizione comando semplice
Utilizza una descrizione comando semplice per descrivere brevemente un elemento UI. Questo snippet di codice mostra
una descrizione comando semplice sopra un pulsante con icona, etichettato "Aggiungi ai preferiti":
@ComposablefunPlainTooltipExample(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")}}}
tooltip è una funzione lambda che definisce il contenuto della descrizione comando utilizzando
il composable PlainTooltip.
Text(plainTooltipText) mostra il testo all'interno del tooltip.
tooltipState controlla lo stato della descrizione comando.
IconButton crea un pulsante su cui è possibile fare clic con un'icona.
Icon(...) mostra un'icona a forma di cuore all'interno del pulsante.
Quando un utente interagisce con IconButton, TooltipBox mostra la descrizione comando
con il testo "Aggiungi ai preferiti". A seconda del dispositivo, gli utenti possono attivare
la descrizione comando nei seguenti modi:
Passaggio del mouse sopra l'icona con un cursore
Premere a lungo l'icona su un dispositivo mobile
Risultato
Questo esempio produce una descrizione comando semplice sopra un'icona:
Figura 2. Una semplice descrizione comando che viene visualizzata quando un utente passa il mouse sopra l'icona a forma di cuore o la preme a lungo.
Visualizzare una descrizione comando avanzata
Utilizza una descrizione comando avanzata per fornire ulteriore contesto su un elemento UI. Questo
esempio crea una descrizione comando avanzata multilinea con un titolo ancorato a un
Icon:
@ComposablefunRichTooltipExample(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 gestisce i listener di eventi per le interazioni degli utenti e aggiorna
TooltipState di conseguenza. Quando TooltipState indica che deve essere mostrata la descrizione comando, viene eseguita la lambda della descrizione comando e TooltipBox mostra RichTooltip. TooltipBox funge da ancora e contenitore sia per i contenuti sia per la descrizione comando.
In questo caso, i contenuti sono un componente IconButton, che fornisce il
comportamento dell'azione selezionabile. Quando viene premuto a lungo (sui dispositivi touch) o passato
sopra (come con il puntatore del mouse) in qualsiasi punto dei contenuti di TooltipBox, viene visualizzata la
descrizione comando per mostrare ulteriori informazioni.
Il composable RichTooltip definisce i contenuti della descrizione comando, inclusi il titolo e il testo del corpo.
TooltipDefaults.rememberRichTooltipPositionProvider() fornisce
informazioni sul posizionamento per le descrizioni comando avanzate.
Risultato
Questo esempio produce una descrizione avanzata con un titolo collegato a un'icona
informativa:
Figura 3. Una descrizione comando avanzata con un titolo e un'icona informativa.
Personalizzare una descrizione comando avanzata
Questo snippet di codice mostra una descrizione comando avanzata con un titolo, azioni personalizzate e un
cursore (freccia) personalizzato visualizzato sopra un pulsante con l'icona di una videocamera:
@ComposablefunAdvancedRichTooltipExample(modifier:Modifier=Modifier,richTooltipSubheadText:String="Custom Rich Tooltip",richTooltipText:String="Rich tooltips support multiple lines of informational text.",richTooltipActionText:String="Dismiss"){valtooltipState=rememberTooltipState()valcoroutineScope=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")}}}
Un RichToolTip mostra una descrizione comando con un titolo e un'azione di chiusura.
Quando viene attivata, tramite una pressione prolungata o passando il puntatore del mouse sopra i contenuti ToolTipBox, la descrizione comando viene visualizzata per circa un secondo.
Puoi chiudere questo suggerimento toccando un altro punto dello schermo o
utilizzando il pulsante di chiusura.
Quando viene eseguita l'azione di chiusura, il sistema avvia una coroutine per chiamare
tooltipState.dismiss. In questo modo si verifica che l'esecuzione dell'azione non venga bloccata durante
la visualizzazione della descrizione comando.
onClick = coroutineScope.launch { tooltipState.show() } } avvia una
coroutine per mostrare manualmente la descrizione comando utilizzando tooltipState.show.
Il parametro action consente di aggiungere elementi interattivi a una
descrizione comando, ad esempio un pulsante.
Il parametro caretSize modifica le dimensioni della freccia della descrizione comando.
Risultato
Questo esempio produce quanto segue:
Figura 4. Una descrizione comando avanzata personalizzata con un'azione di chiusura ancorata a un'icona della videocamera.
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-08-28 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-08-28 UTC."],[],[],null,["Use [tooltips](https://m3.material.io/components/tooltips/overview) to add context to a button or other UI element.\nThere are two types of tooltips:\n\n- **Plain tooltips**: Describe elements or actions of icon buttons.\n- **Rich tooltips**: Provide more detail, such as describing the value of a feature. Can also include an optional title, link, and buttons.\n\n**Figure 1.** A plain tooltip (1) and a rich tooltip (2).\n\nAPI surface\n\nYou can use the [`TooltipBox`](/reference/kotlin/androidx/compose/material3/package-summary#TooltipBox(androidx.compose.ui.window.PopupPositionProvider,kotlin.Function1,androidx.compose.material3.TooltipState,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Boolean,kotlin.Boolean,kotlin.Function0)) composable to implement tooltips in your app.\nYou control [`TooltipBox`](/reference/kotlin/androidx/compose/material3/package-summary#TooltipBox(androidx.compose.ui.window.PopupPositionProvider,kotlin.Function1,androidx.compose.material3.TooltipState,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Boolean,kotlin.Boolean,kotlin.Function0)) appearance with these main parameters:\n\n- `positionProvider`: Places the tooltip relative to the anchor content. You typically use a default position provider from the `TooltipDefaults`, or you can provide your own if you need custom positioning logic.\n- `tooltip`: The composable that contains the tooltip's content. You typically use either the `PlainTooltip` or `RichTooltip` composables.\n - Use `PlainTooltip` to describe elements or actions of icon buttons.\n - Use `RichTooltip` to provide more details, like describing the value of a feature. Rich tooltips can include an optional title, link, and buttons.\n- `state`: The state holder that contains the UI logic and element state for this tooltip.\n- `content`: The composable content that the tooltip is anchored to.\n\nDisplay a plain tooltip\n\nUse a plain tooltip to briefly describe a UI element. This code snippet displays\na plain tooltip on top of an icon button, labeled \"Add to favorites\":\n\n\n```kotlin\n@Composable\nfun PlainTooltipExample(\n modifier: Modifier = Modifier,\n plainTooltipText: String = \"Add to favorites\"\n) {\n TooltipBox(\n modifier = modifier,\n positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),\n tooltip = {\n PlainTooltip { Text(plainTooltipText) }\n },\n state = rememberTooltipState()\n ) {\n IconButton(onClick = { /* Do something... */ }) {\n Icon(\n imageVector = Icons.Filled.Favorite,\n contentDescription = \"Add to favorites\"\n )\n }\n }\n}\nhttps://github.com/android/snippets/blob/dd30aee903e8c247786c064faab1a9ca8d10b46e/compose/snippets/src/main/java/com/example/compose/snippets/components/Tooltips.kt#L74-L95\n```\n\n\u003cbr /\u003e\n\nKey points about the code\n\n- `TooltipBox` generates a tooltip with the text \"Add to favorites\".\n - [`TooltipDefaults.rememberPlainTooltipPositionProvider()`](/reference/kotlin/androidx/compose/material3/TooltipDefaults?#rememberPlainTooltipPositionProvider(androidx.compose.ui.unit.Dp)) provides default positioning for plain tooltips.\n - `tooltip` is a lambda function that defines the tooltip's content using the [`PlainTooltip`](/reference/kotlin/androidx/compose/material3/TooltipScope#(androidx.compose.material3.TooltipScope).PlainTooltip(androidx.compose.ui.Modifier,androidx.compose.ui.unit.DpSize,androidx.compose.ui.unit.Dp,androidx.compose.ui.graphics.Shape,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.unit.Dp,androidx.compose.ui.unit.Dp,kotlin.Function0)) composable.\n - `Text(plainTooltipText)` displays the text within the tooltip.\n - [`tooltipState`](/reference/kotlin/androidx/compose/material3/TooltipState) controls the state of the tooltip.\n- `IconButton` creates a clickable button with an icon.\n - `Icon(...)` displays a heart icon within the button.\n - When a user interacts with the `IconButton`, `TooltipBox` shows the tooltip with the text \"Add to favorites\". Depending on the device, users can trigger the tooltip in the following ways:\n - Hovering over the icon with a cursor\n - Long-pressing the icon on a mobile device\n\nResult\n\nThis example produces a plain tooltip on top of an icon:\n**Figure 2.**A plain tooltip that appears when a user hovers over or long-presses the heart icon.\n\nDisplay a rich tooltip\n\nUse a rich tooltip to provide additional context about a UI element. This\nexample creates a multi-line rich tooltip with a title that is anchored to an\n`Icon`:\n\n\n```kotlin\n@Composable\nfun RichTooltipExample(\n modifier: Modifier = Modifier,\n richTooltipSubheadText: String = \"Rich Tooltip\",\n richTooltipText: String = \"Rich tooltips support multiple lines of informational text.\"\n) {\n TooltipBox(\n modifier = modifier,\n positionProvider = TooltipDefaults.rememberRichTooltipPositionProvider(),\n tooltip = {\n RichTooltip(\n title = { Text(richTooltipSubheadText) }\n ) {\n Text(richTooltipText)\n }\n },\n state = rememberTooltipState()\n ) {\n IconButton(onClick = { /* Icon button's click event */ }) {\n Icon(\n imageVector = Icons.Filled.Info,\n contentDescription = \"Show more information\"\n )\n }\n }\n}https://github.com/android/snippets/blob/dd30aee903e8c247786c064faab1a9ca8d10b46e/compose/snippets/src/main/java/com/example/compose/snippets/components/Tooltips.kt#L106-L131\n```\n\n\u003cbr /\u003e\n\nKey points about the code\n\n- `TooltipBox` handles the event listeners for user interactions and updates `TooltipState` accordingly. When `TooltipState` indicates that the tooltip should be shown, the tooltip lambda executes, and `TooltipBox` displays the `RichTooltip`. The `TooltipBox` acts as the anchor and container for both content and the tooltip.\n - In this case, the content is an `IconButton` component, which provides the tappable action behavior. When long-pressed (on touch devices) or hovered over (as with the mouse pointer) anywhere in `TooltipBox`'s content, the tooltip will display to show more information.\n- The `RichTooltip` composable defines the tooltip's content, including the title and body text. [`TooltipDefaults.rememberRichTooltipPositionProvider()`](/reference/kotlin/androidx/compose/material3/TooltipDefaults?#rememberRichTooltipPositionProvider(androidx.compose.ui.unit.Dp)) provides positioning information for rich tooltips.\n\nResult\n\nThis example produces a rich tooltip with a title attached to an information\nicon:\n**Figure 3.**A rich tooltip with a title and an information icon.\n\nCustomize a rich tooltip\n\nThis code snippet displays a rich tooltip with a title, custom actions, and a\ncustom caret (arrow) displayed on top of a camera icon button:\n\n\n```kotlin\n@Composable\nfun AdvancedRichTooltipExample(\n modifier: Modifier = Modifier,\n richTooltipSubheadText: String = \"Custom Rich Tooltip\",\n richTooltipText: String = \"Rich tooltips support multiple lines of informational text.\",\n richTooltipActionText: String = \"Dismiss\"\n) {\n val tooltipState = rememberTooltipState()\n val coroutineScope = rememberCoroutineScope()\n\n TooltipBox(\n modifier = modifier,\n positionProvider = TooltipDefaults.rememberRichTooltipPositionProvider(),\n tooltip = {\n RichTooltip(\n title = { Text(richTooltipSubheadText) },\n action = {\n Row {\n TextButton(onClick = {\n coroutineScope.launch {\n tooltipState.dismiss()\n }\n }) {\n Text(richTooltipActionText)\n }\n }\n },\n caretSize = DpSize(32.dp, 16.dp)\n ) {\n Text(richTooltipText)\n }\n },\n state = tooltipState\n ) {\n IconButton(onClick = {\n coroutineScope.launch {\n tooltipState.show()\n }\n }) {\n Icon(\n imageVector = Icons.Filled.Camera,\n contentDescription = \"Open camera\"\n )\n }\n }\n}https://github.com/android/snippets/blob/dd30aee903e8c247786c064faab1a9ca8d10b46e/compose/snippets/src/main/java/com/example/compose/snippets/components/Tooltips.kt#L142-L187\n```\n\n\u003cbr /\u003e\n\nKey points about the code\n\n- A `RichToolTip` displays a tooltip with a title and dismiss action.\n- When activated, either by a long-press or hovering over the `ToolTipBox` content with the mouse pointer, the tooltip is displayed for about one second. You can dismiss this tooltip by either tapping elsewhere on the screen or using the dismiss action button.\n- When the dismiss action executes, the system launches a coroutine to call `tooltipState.dismiss`. This verifies the action execution isn't blocked while the tooltip is displayed.\n- `onClick = coroutineScope.launch { tooltipState.show() } }` launches a coroutine to manually show the tooltip using `tooltipState.show`.\n- The `action` parameter allows for the adding of interactive elements to a tooltip, such as a button.\n- The `caretSize` parameter modifies the size of the tooltip's arrow.\n\nResult\n\nThis example produces the following:\n**Figure 4.** A custom rich tooltip with a dismiss action anchored to a camera icon.\n\nAdditional resources\n\n- Material Design: [Tooltips](https://m3.material.io/components/tooltips/overview)"]]