Material TooltipBox that wraps a composable with a tooltip.
@Preview
@Composable
fun PlainTooltipSample() {
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
tooltip = { PlainTooltip { Text("Add to favorites") } },
state = rememberTooltipState(),
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Favorite, contentDescription = "Localized Description")
}
}
}
@Composable
fun PlainTooltipWithCaret() {
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
tooltip = {
PlainTooltip(caretShape = TooltipDefaults.caretShape()) { Text("Add to favorites") }
},
state = rememberTooltipState(),
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Favorite, contentDescription = "Localized Description")
}
}
}
@Composable
fun PlainTooltipWithCaretBelowAnchor() {
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Below),
tooltip = {
PlainTooltip(caretShape = TooltipDefaults.caretShape()) { Text("Add to favorites") }
},
state = rememberTooltipState(),
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Favorite, contentDescription = "Localized Description")
}
}
}
@Composable
fun PlainTooltipWithCaretEndOfAnchor() {
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.End),
tooltip = {
PlainTooltip(caretShape = TooltipDefaults.caretShape()) { Text("Add to favorites") }
},
state = rememberTooltipState(),
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Favorite, contentDescription = "Localized Description")
}
}
}
@Composable
fun PlainTooltipWithCaretLeftOfAnchor() {
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Left),
tooltip = {
PlainTooltip(caretShape = TooltipDefaults.caretShape()) { Text("Add to favorites") }
},
state = rememberTooltipState(),
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Favorite, contentDescription = "Localized Description")
}
}
}
@Composable
fun PlainTooltipWithCaretRightOfAnchor() {
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Right),
tooltip = {
PlainTooltip(caretShape = TooltipDefaults.caretShape()) { Text("Add to favorites") }
},
state = rememberTooltipState(),
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Favorite, contentDescription = "Localized Description")
}
}
}
@Composable
fun PlainTooltipWithCaretStartOfAnchor() {
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Start),
tooltip = {
PlainTooltip(caretShape = TooltipDefaults.caretShape()) { Text("Add to favorites") }
},
state = rememberTooltipState(),
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Favorite, contentDescription = "Localized Description")
}
}
}
@Composable
fun PlainTooltipWithCustomCaret() {
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
tooltip = {
PlainTooltip(caretShape = TooltipDefaults.caretShape(DpSize(24.dp, 12.dp))) {
Text("Add to favorites")
}
},
state = rememberTooltipState(),
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Favorite, contentDescription = "Localized Description")
}
}
}
@Preview
@Composable
fun PlainTooltipWithManualInvocationSample() {
val tooltipState = rememberTooltipState()
val scope = rememberCoroutineScope()
Column(horizontalAlignment = Alignment.CenterHorizontally) {
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
tooltip = { PlainTooltip { Text("Add to list") } },
state = tooltipState,
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(
imageVector = Icons.Filled.AddCircle,
contentDescription = "Localized Description",
)
}
}
Spacer(Modifier.requiredHeight(30.dp))
OutlinedButton(onClick = { scope.launch { tooltipState.show() } }) {
Text("Display tooltip")
}
}
}
@Composable
fun RichTooltipSample() {
val tooltipState = rememberTooltipState(isPersistent = true)
val scope = rememberCoroutineScope()
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
tooltip = {
RichTooltip(
title = { Text(richTooltipSubheadText) },
action = {
TextButton(onClick = { scope.launch { tooltipState.dismiss() } }) {
Text(richTooltipActionText)
}
},
) {
Text(richTooltipText)
}
},
hasAction = true,
state = tooltipState,
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Info, contentDescription = "Localized Description")
}
}
}
@Composable
fun RichTooltipWithCaretSample() {
val tooltipState = rememberTooltipState(isPersistent = true)
val scope = rememberCoroutineScope()
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
tooltip = {
RichTooltip(
title = { Text(richTooltipSubheadText) },
action = {
TextButton(onClick = { scope.launch { tooltipState.dismiss() } }) {
Text(richTooltipActionText)
}
},
caretShape = TooltipDefaults.caretShape(),
) {
Text(richTooltipText)
}
},
hasAction = true,
state = tooltipState,
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Info, contentDescription = "Localized Description")
}
}
}
@Composable
fun RichTooltipWithCustomCaretSample() {
val tooltipState = rememberTooltipState(isPersistent = true)
val scope = rememberCoroutineScope()
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
tooltip = {
RichTooltip(
title = { Text(richTooltipSubheadText) },
action = {
TextButton(onClick = { scope.launch { tooltipState.dismiss() } }) {
Text(richTooltipActionText)
}
},
caretShape = TooltipDefaults.caretShape(DpSize(32.dp, 16.dp)),
) {
Text(richTooltipText)
}
},
hasAction = true,
state = tooltipState,
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Info, contentDescription = "Localized Description")
}
}
}
@Composable
fun RichTooltipWithManualInvocationSample() {
val tooltipState = rememberTooltipState(isPersistent = true)
val scope = rememberCoroutineScope()
Column(horizontalAlignment = Alignment.CenterHorizontally) {
TooltipBox(
positionProvider =
TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
tooltip = {
RichTooltip(
title = { Text(richTooltipSubheadText) },
action = {
TextButton(onClick = { scope.launch { tooltipState.dismiss() } }) {
Text(richTooltipActionText)
}
},
) {
Text(richTooltipText)
}
},
hasAction = true,
state = tooltipState,
) {
IconButton(onClick = { /* Icon button's click event */ }) {
Icon(imageVector = Icons.Filled.Info, contentDescription = "Localized Description")
}
}
Spacer(Modifier.requiredHeight(30.dp))
OutlinedButton(onClick = { scope.launch { tooltipState.show() } }) {
Text("Display tooltip")
}
}
}