Unlike Compose's built-in border modifier, outline does not affect layout or size - it draws purely outside the composable's bounds.
| Parameter | Description |
|---|---|
width | The thickness of the outline |
color | The color of the outline |
shape | The shape of the composable (defaults to RectangleShape) |
offset | Distance between composable and outline (defaults to 0.dp) |
Code Examples
Basic Example
Outline requires a width and color to render anything around the composable.
The shape parameter accepts the shape of the composable you are styling.
The final shape of the outline will be calculated based of the provided shape, width and offset.
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
SimpleButton(
shape = RoundedCornerShape(8.dp),
modifier = Modifier.outline(
width = 2.dp,
color = Color(0xFF3B82F6),
shape = RoundedCornerShape(8.dp),
)
)
Customizing Width
You can customize the thickness of the outline by adjusting the width parameter.
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
SimpleButton(
modifier = Modifier.outline(1.dp, Color(0xFF3B82F6), shape = RoundedCornerShape(8.dp))
)
SimpleButton(
modifier = Modifier.outline(2.dp, Color(0xFF3B82F6), shape = RoundedCornerShape(8.dp))
)
SimpleButton(
modifier = Modifier.outline(4.dp, Color(0xFF3B82F6), shape = RoundedCornerShape(8.dp))
)
Customizing Shape
The outline adapts to different shapes. The shape parameter should match the shape of your composable for proper alignment.
Note that generic shapes are not supported and will fail silently.
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
SimpleButton(
shape = RectangleShape,
modifier = Modifier.outline(2.dp, Color(0xFF3B82F6), shape = RectangleShape)
)
SimpleButton(
shape = RoundedCornerShape(8.dp),
modifier = Modifier.outline(2.dp, Color(0xFF3B82F6), shape = RoundedCornerShape(8.dp))
)
SimpleButton(
shape = CircleShape,
modifier = Modifier.outline(2.dp, Color(0xFF3B82F6), shape = CircleShape)
)
Customizing Offset
The offset parameter controls the distance between the composable and its outline, creating a gap effect.
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
SimpleButton(
modifier = Modifier.outline(2.dp, Color(0xFF3B82F6), offset = 0.dp, shape = RoundedCornerShape(8.dp))
)
SimpleButton(
modifier = Modifier.outline(2.dp, Color(0xFF3B82F6), offset = 4.dp, shape = RoundedCornerShape(8.dp))
)
SimpleButton(
modifier = Modifier.outline(2.dp, Color(0xFF3B82F6), offset = 8.dp, shape = RoundedCornerShape(8.dp))
)
Customizing Color
You can customize the outline color to match your design system or create visual emphasis.
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
SimpleButton(
modifier = Modifier.outline(2.dp, Color(0xFFEF4444), offset = 2.dp, shape = RoundedCornerShape(8.dp))
)
SimpleButton(
modifier = Modifier.outline(2.dp, Color(0xFF10B981), offset = 2.dp, shape = RoundedCornerShape(8.dp))
)
SimpleButton(
modifier = Modifier.outline(2.dp, Color(0xFF8B5CF6), offset = 2.dp, shape = RoundedCornerShape(8.dp))
)
