ツールチップを使用して、ボタンやその他の UI 要素にコンテキストを追加します。 ツールチップには次の 2 種類があります。
- プレーン ツールチップ: アイコンボタンの要素やアクションを説明します。
- リッチ ツールチップ: 特徴量の値を説明するなど、詳細情報を提供します。タイトル、リンク、ボタン(省略可)を含めることもできます。
API サーフェス
TooltipBox コンポーザブルを使用して、アプリにツールチップを実装できます。
TooltipBox の外観は、次の主なパラメータで制御します。
positionProvider: アンカー コンテンツを基準としてツールチップを配置します。通常はTooltipDefaultsのデフォルトのポジション プロバイダを使用しますが、カスタムのポジショニング ロジックが必要な場合は、独自のプロバイダを指定できます。tooltip: ツールチップのコンテンツを含むコンポーザブル。通常は、PlainTooltipコンポーザブルまたはRichTooltipコンポーザブルを使用します。PlainTooltipを使用して、アイコンボタンの要素やアクションを説明します。RichTooltipを使用して、特徴量の値を説明するなど、詳細情報を提供します。リッチ ツールチップには、タイトル、リンク、ボタン(省略可)を含めることができます。
state: このツールチップの UI ロジックと要素の状態を含む状態ホルダー。content: ツールチップがアンカーされているコンポーザブル コンテンツ。
プレーン ツールチップを表示する
プレーン ツールチップを使用して、UI 要素を簡単に説明します。次のコード スニペットは、「お気に入りに追加」というラベルの付いたアイコンボタンの上にプレーン ツールチップを表示します。
@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は「お気に入りに追加」というテキストのツールチップを表示します。デバイスに応じて、ユーザーは次の方法でツールチップをトリガーできます。 - カーソルをアイコンに合わせる
- モバイル デバイスでアイコンを長押しする
結果
この例では、アイコンの上にプレーン ツールチップが表示されます。
リッチ ツールチップを表示する
リッチ ツールチップを使用して、UI 要素に関する追加のコンテキストを提供します。この例では、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のコンテンツにカーソルを合わせると、ツールチップが約 1 秒間表示されます。 このツールチップを閉じるには、画面の別の場所をタップするか、閉じる操作ボタンを使用します。 - 閉じるアクションが実行されると、システムはコルーチンを起動して
tooltipState.dismissを呼び出します。これにより、ツールチップの表示中にアクションの実行がブロックされないことが確認されます。 onClick = coroutineScope.launch { tooltipState.show() } }は、コルーチンを起動してtooltipState.showを使用してツールチップを手動で表示します。actionパラメータを使用すると、ボタンなどのインタラクティブな要素をツールチップに追加できます。caretSizeパラメータは、ツールチップの矢印のサイズを変更します。
結果
この例では、次のようになります。
参考情報
- マテリアル デザイン: ツールチップ