Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Bir düğmeye veya başka bir kullanıcı arayüzü öğesine bağlam eklemek için ipuçlarını kullanın.
İki tür ipucu vardır:
Düz ipuçları: Simge düğmelerinin öğelerini veya işlemlerini açıklar.
Zengin ipuçları: Bir özelliğin değerini açıklama gibi daha fazla ayrıntı sağlar. İsteğe bağlı olarak başlık, bağlantı ve düğmeler de içerebilir.
1. Şekil. Düz bir ipucu (1) ve zengin bir ipucu (2).
API yüzeyi
Uygulamanızda ipuçlarını uygulamak için TooltipBox composable'ını kullanabilirsiniz.
TooltipBox görünümünü şu ana parametrelerle kontrol edersiniz:
positionProvider: İpucunu, bağlantı içeriğine göre yerleştirir. Genellikle TooltipDefaults konum sağlayıcısını kullanırsınız veya özel konumlandırma mantığına ihtiyacınız varsa kendi sağlayıcınızı kullanabilirsiniz.
tooltip: İpucu içeriğini içeren composable. Genellikle PlainTooltip veya RichTooltip composable'larını kullanırsınız.
Simge düğmelerinin öğelerini veya işlemlerini açıklamak için PlainTooltip kullanın.
RichTooltip kullanarak özelliklerin değerini açıklama gibi daha fazla ayrıntı sağlayın. Zengin ipuçları isteğe bağlı olarak başlık, bağlantı ve düğmeler içerebilir.
state: Bu ipucu için kullanıcı arayüzü mantığını ve öğe durumunu içeren durum tutucu.
content: İpucunun bağlı olduğu birleştirilebilir içerik.
Düz bir ipucu görüntüleme
Bir kullanıcı arayüzü öğesini kısaca açıklamak için düz bir ipucu kullanın. Bu kod snippet'i, "Favorilere ekle" etiketli bir simge düğmesinin üzerinde düz bir ipucu görüntüler:
@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")}}}
IconButton simge içeren tıklanabilir bir düğme oluşturur.
Icon(...) düğmesinde kalp simgesi gösterilir.
Kullanıcı IconButton ile etkileşime girdiğinde TooltipBox, "Favorilere ekle" metnini içeren ipucunu gösterir. Kullanıcılar, cihaza bağlı olarak aşağıdaki yöntemlerle ipucunu tetikleyebilir:
İmleçle simgenin üzerine gelme
Mobil cihazda simgeye uzun basma
Sonuç
Bu örnek, bir simgenin üzerinde düz bir ipucu oluşturur:
Şekil 2. Kullanıcı, kalp simgesinin üzerine geldiğinde veya simgeye uzun bastığında görünen düz bir ipucu.
Zengin bir ipucu görüntüleme
Bir kullanıcı arayüzü öğesi hakkında ek bağlam sağlamak için zengin ipucu kullanın. Bu örnekte, Icon öğesine sabitlenmiş bir başlığa sahip çok satırlı bir zengin ipucu oluşturuluyor:
@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, kullanıcı etkileşimleriyle ilgili etkinlik işleyicilerini yönetir ve TooltipState buna göre günceller. TooltipState, ipucunun gösterilmesi gerektiğini belirttiğinde ipucu lambdası yürütülür ve TooltipBox, RichTooltip öğesini gösterir. TooltipBox, hem içerik hem de ipucu için bağlantı ve kapsayıcı görevi görür.
Bu durumda, içerik, dokunma işlemi davranışını sağlayan bir IconButton bileşenidir. TooltipBox içeriğinde herhangi bir yerde uzun basıldığında (dokunmatik cihazlarda) veya imleçle üzerine gelindiğinde (fare işaretçisiyle olduğu gibi) ipucu, daha fazla bilgi göstermek için görüntülenir.
RichToolTip simgesi, başlık ve kapatma işlemi içeren bir ipucu gösterir.
Uzun basarak veya fare imleciyle ToolTipBox
içeriğin üzerine gelerek etkinleştirildiğinde ipucu yaklaşık bir saniye boyunca gösterilir.
Ekranın başka bir yerine dokunarak veya kapatma işlem düğmesini kullanarak bu ipucunu kapatabilirsiniz.
Kapatma işlemi yürütüldüğünde sistem, tooltipState.dismiss işlevini çağırmak için bir eş yordam başlatır. Bu, ipucu gösterilirken işlem yürütülmesinin engellenmediğini doğrular.
onClick = coroutineScope.launch { tooltipState.show() } }, tooltipState.show kullanarak ipucunu manuel olarak göstermek için bir coroutine başlatır.
action parametresi, bir ipucuna düğme gibi etkileşimli öğeler eklenmesine olanak tanır.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-08-28 UTC.
[null,null,["Son güncelleme tarihi: 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)"]]