Skip to content

Compose Extensions

Balloon provides extension functions for Balloon.Builder that allow you to use Compose Color values directly.

Color Extensions

Arrow Color

Set the arrow color using a Compose Color:

val builder = rememberBalloonBuilder {
    setArrowColor(Color(0xFF4A90E2))
}

Background Color

Set the balloon background color:

val builder = rememberBalloonBuilder {
    setBackgroundColor(Color.DarkGray)
}

Text Color

Set the text color:

val builder = rememberBalloonBuilder {
    setTextColor(Color.White)
}

Icon Color

Set the icon drawable color:

val builder = rememberBalloonBuilder {
    setIconColor(Color.Yellow)
}

Overlay Color

Set the overlay background color:

val builder = rememberBalloonBuilder {
    setOverlayColor(Color.Black.copy(alpha = 0.6f))
}

Overlay Padding Color

Set the overlay padding color:

val builder = rememberBalloonBuilder {
    setOverlayPaddingColor(Color.Blue)
}

Complete Example

@Composable
fun ThemedBalloon() {
    val primaryColor = MaterialTheme.colorScheme.primary
    val onPrimaryColor = MaterialTheme.colorScheme.onPrimary
    val surfaceColor = MaterialTheme.colorScheme.surface

    val builder = rememberBalloonBuilder {
        setArrowSize(10)
        setArrowPosition(0.5f)
        setWidth(BalloonSizeSpec.WRAP)
        setHeight(BalloonSizeSpec.WRAP)
        setPadding(12)
        setCornerRadius(8f)

        // Use Compose colors directly
        setBackgroundColor(primaryColor)
        setTextColor(onPrimaryColor)
        setArrowColor(primaryColor)
        setOverlayColor(Color.Black.copy(alpha = 0.5f))
    }

    val balloonState = rememberBalloonState(builder)

    Button(
        onClick = { balloonState.showAlignTop() },
        modifier = Modifier.balloon(balloonState) {
            Text(
                text = "Themed tooltip",
                color = onPrimaryColor,
                modifier = Modifier.padding(8.dp)
            )
        }
    ) {
        Text("Show Balloon")
    }
}

Using with Material Theme

The extensions work seamlessly with Material Theme colors:

val builder = rememberBalloonBuilder {
    val colors = MaterialTheme.colorScheme

    setBackgroundColor(colors.primaryContainer)
    setTextColor(colors.onPrimaryContainer)
    setArrowColor(colors.primaryContainer)
    setOverlayColor(colors.scrim.copy(alpha = 0.5f))
}

Alpha Support

Compose colors with alpha channels are fully supported:

val builder = rememberBalloonBuilder {
    setBackgroundColor(Color.Black.copy(alpha = 0.8f))
    setOverlayColor(Color.Black.copy(alpha = 0.4f))
}