Skip to main content
Dividers are thin lines that separate content into clear groups. Lumo UI provides both horizontal and vertical dividers.

HorizontalDivider

A horizontal line used to separate content vertically.
modifier
Modifier
default:"Modifier"
Modifier to be applied to the divider
thickness
Dp
default:"DividerDefaults.Thickness (1.dp)"
Thickness of the divider line
color
Color
default:"DividerDefaults.color"
Color of the divider. Defaults to AppTheme.colors.surface

VerticalDivider

A vertical line used to separate content horizontally.
modifier
Modifier
default:"Modifier"
Modifier to be applied to the divider
thickness
Dp
default:"DividerDefaults.Thickness (1.dp)"
Thickness of the divider line
color
Color
default:"DividerDefaults.color"
Color of the divider. Defaults to AppTheme.colors.surface

Usage Examples

Basic Horizontal Divider

Column {
    Text("Item 1")
    HorizontalDivider()
    Text("Item 2")
    HorizontalDivider()
    Text("Item 3")
}

Horizontal Divider with Custom Styling

HorizontalDivider(
    modifier = Modifier.padding(vertical = 8.dp),
    thickness = 2.dp,
    color = AppTheme.colors.primary
)

Vertical Divider in Row

Row(
    modifier = Modifier.height(48.dp),
    verticalAlignment = Alignment.CenterVertically
) {
    Text("Left")
    VerticalDivider(
        modifier = Modifier.padding(horizontal = 16.dp)
    )
    Text("Center")
    VerticalDivider(
        modifier = Modifier.padding(horizontal = 16.dp)
    )
    Text("Right")
}

Vertical Divider with Custom Styling

VerticalDivider(
    modifier = Modifier.padding(horizontal = 8.dp),
    thickness = 2.dp,
    color = Color.Gray
)

Full-Width Divider

HorizontalDivider(
    modifier = Modifier.fillMaxWidth()
)

Divider in LazyColumn

LazyColumn {
    items(items) { item ->
        Text(item.title)
        HorizontalDivider(
            modifier = Modifier.padding(vertical = 4.dp)
        )
    }
}

Divider with Inset

Column {
    ListItem(
        headlineContent = { Text("Item 1") },
        leadingContent = { Icon(Icons.Default.Person, null) }
    )
    HorizontalDivider(
        modifier = Modifier.padding(start = 56.dp) // Align with content
    )
    ListItem(
        headlineContent = { Text("Item 2") },
        leadingContent = { Icon(Icons.Default.Email, null) }
    )
}

Thick Divider as Section Separator

Column {
    Text("Section 1", style = AppTheme.typography.h2)
    // Content
    
    HorizontalDivider(
        modifier = Modifier.padding(vertical = 24.dp),
        thickness = 4.dp,
        color = AppTheme.colors.primary
    )
    
    Text("Section 2", style = AppTheme.typography.h2)
    // Content
}

Vertical Divider Full Height

Row(modifier = Modifier.height(200.dp)) {
    Column(modifier = Modifier.weight(1f)) {
        Text("Left content")
    }
    
    VerticalDivider(
        modifier = Modifier.fillMaxHeight()
    )
    
    Column(modifier = Modifier.weight(1f)) {
        Text("Right content")
    }
}

Styling Options

Thickness Variants

// Thin divider
HorizontalDivider(thickness = 0.5.dp)

// Normal divider (default)
HorizontalDivider(thickness = 1.dp)

// Thick divider
HorizontalDivider(thickness = 4.dp)

Color Variants

// Theme color
HorizontalDivider(color = AppTheme.colors.surface)

// Custom color
HorizontalDivider(color = Color(0xFFE0E0E0))

// Primary color
HorizontalDivider(color = AppTheme.colors.primary)

// Transparent
HorizontalDivider(color = Color.Transparent)

Best Practices

  1. Spacing: Add padding around dividers for better visual separation
HorizontalDivider(
    modifier = Modifier.padding(vertical = 8.dp)
)
  1. Inset dividers: Align with content when used in lists
HorizontalDivider(
    modifier = Modifier.padding(start = iconSize + spacing)
)
  1. Thickness: Use default 1dp for most cases, thicker for major section breaks
  2. Color contrast: Ensure sufficient contrast with background
  3. Avoid overuse: Don’t use dividers between every single item

Implementation Details

Dividers are implemented using Canvas for efficient rendering:
  • HorizontalDivider: Fills width and draws a horizontal line
  • VerticalDivider: Fills height and draws a vertical line
  • Both use drawLine for rendering the divider line

Source Reference

Divider component implementation: components-lab/src/commonMain/kotlin/com/nomanr/lumo/ui/components/Divider.kt

Build docs developers (and LLMs) love