The Principal Dev – Masterclass for Tech Leads

The Principal Dev – Masterclass for Tech LeadsNov 27-28

Join

Sonatype Central

Redline for Android

Easy Redlines for Jetpack Compose - Visualize positions, sizes, spacings, and alignment guides to verify your implementation against specs or to debug layout problems.

Inspired by https://github.com/robb/Redline

Features

Sample Screenshot

Installation

The library is published at the coordinates:

implementation 'me.sergeich:redline:0.1.0'

Usage

The library provides modifiers that can be applied to any Composable to visualize layout measurements.

Global Configuration

You can configure redline visualization globally using RedlineConfig and LocalRedlineConfig:

import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.sp
import me.sergeich.redline.LocalRedlineConfig
import me.sergeich.redline.RedlineConfig
import me.sergeich.redline.SizeUnit

CompositionLocalProvider(
    LocalRedlineConfig provides RedlineConfig(
        color = Color.Blue,
        textColor = Color.White,
        textSize = 12.sp,
        sizeUnit = SizeUnit.Dp,
        useInPreviewOnly = false // Set to true to only show redlines in preview mode
    )
) {
    // Your composables here
    // All redline modifiers will use the global config unless overridden
}

The useInPreviewOnly flag is particularly useful for development - when set to true, redlines will only appear in Android Studio Preview, not in the running app.

Position Visualization

Card(
    modifier = Modifier
        .size(100.dp)
        .background(Color.Blue)
        .visualizePosition(
            color = Color.Red,
            edges = setOf(Edge.Top, Edge.Leading, Edge.Trailing, Edge.Bottom)
        )
) {
    Text("Content")
}

Dimension Visualization

// Show both width and height
Card(
    modifier = Modifier
        .size(200.dp, 100.dp)
        .background(Color.Blue)
        .visualizeDimension(
            color = Color.Red,
            dimensions = setOf(Dimension.Width, Dimension.Height)
        )
) {
    Text("Content")
}

// Show only width
Card(
    modifier = Modifier
        .fillMaxWidth()
        .height(80.dp)
        .background(Color.Blue)
        .visualizeDimension(
            color = Color.Cyan,
            dimensions = setOf(Dimension.Width)
        )
) {
    Text("Content")
}

// Convenience function for both dimensions
Card(
    modifier = Modifier
        .size(150.dp)
        .background(Color.Blue)
        .visualizeSize(color = Color.Green)
) {
    Text("Content")
}

Baseline Visualization

Text(
    text = "Sample Text",
    modifier = Modifier
        .visualizeBaseline(color = Color.Red)
)

Spacing Visualization

Column(
    modifier = Modifier
        .padding(16.dp)
        .visualizeSpacing(
            color = Color.Red,
            axis = Axis.Vertical
        )
) {
    repeat(3) { index ->
        Card(
            modifier = Modifier
                .fillMaxWidth()
                .height(40.dp)
                .measureSpacing() // Mark this component for spacing measurement
        ) {
            Text("Item ${index + 1}")
        }
    }
}

API Reference

Configuration

RedlineConfig

Data class for configuring redline visualization settings globally or per modifier.

Properties:

LocalRedlineConfig

CompositionLocal that provides RedlineConfig throughout the composition tree. Modifiers will use this config unless a specific config is provided.

Enums

Modifier Extensions

Modifier.visualizePosition()

Visualizes component position relative to its parent with measurement lines and labels.

Overload 1 - Individual parameters:

Overload 2 - Config object:

Modifier.visualizeDimension()

Visualizes component dimensions with measurement lines and labels.

Overload 1 - Individual parameters:

Overload 2 - Config object:

Modifier.visualizeSize()

Convenience function for visualizing both width and height dimensions.

Overload 1 - Individual parameters:

Overload 2 - Config object:

Modifier.visualizeBaseline()

Visualizes text baselines with horizontal lines.

Overload 1 - Individual parameters:

Overload 2 - Config object:

Modifier.measureSpacing()

Marks composables for spacing measurement. Use with visualizeSpacing().

Modifier.visualizeSpacing()

Visualizes spacing between marked composables.

Overload 1 - Individual parameters:

Overload 2 - Config object:

Examples

See the example app in app/src/main/java/org/example/redline/MainActivity.kt for comprehensive usage examples.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Join libs.tech

...and unlock some superpowers

GitHub

We won't share your data with anyone else.