lazy-grid
                                
                                 lazy-grid copied to clipboard
                                
                                    lazy-grid copied to clipboard
                            
                            
                            
                        LazyGrid library for Jetpack Compose
LazyGrid
LazyGrid library for Jetpack Compose.
About
LazyGrid is a grid view implementation for Android's new and modern UI toolkit Compose. This library is suitable for to display large amount of data, it'll only compose the rows which are visible in the component’s viewport. It can be used in a LazyColumn to create a grid view.
LazyCollapsibleGrid version has the ability to collapse desired amount of rows with animations. It has some extra parameters but is also lazy and suitable for to display big data.
Metrics
Metrics is the way of measuring the performance of composables. Ideally a composable method should be restartable and skipabble for the compiler to work with best performance. Besides being lazy, LazyGrid and LazyCollapsibleGrid are also restartable and skipabble for better performance for your Android application.
Demo
FillSize
All items of row shares the full width equally without any spaces.
| LazyGrid | LazyCollapsibleGrid | 
|---|---|
|  |  | 
FixedSize
Items placed with a fixed width and spaced equally according to remaining space.
| LazyGrid | LazyCollapsibleGrid | 
|---|---|
|  |  | 
SpacedBy
Items spaced by a fixed space and share the remaining width equally.
| LazyGrid | LazyCollapsibleGrid | 
|---|---|
|  |  | 
Setup
Gradle
allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
    implementation 'com.github.yusufarisoy:lazy-grid:1.0.0'
}
Composable
LazyColumn(modifier = Modifier.fillMaxSize()) {
    LazyGrid(
        rows = listOf(),
        elementPerRow = 4,
        itemPlacementType = ItemPlacementType.FixedSize(itemWidth = 80.dp),
        contentPadding = PaddingValues(horizontal = 16.dp)
    ) { item, modifier ->
        CustomGridItem(item, modifier)
    }
    
    // Collapsible
    var isExpanded by remember { mutableStateOf(false) }
    
    LazyCollapsibleGrid(
        rows = listOf(),
        collapsibleRows = listOf(),
        elementPerRow = 3,
        itemPlacementType = ItemPlacementType.SpacedBy(space = 16.dp),
        contentPadding = PaddingValues(horizontal = 16.dp),
        isExpanded = isExpanded,
        enterTransition = expandVertically(),
        exitTransition = shrinkVertically(),
        collapseButton = { CustomCollapseButton(onClick = { isExpanded = !isExpanded }) }
    ) { item, modifier ->
        CustomGridItem(item, modifier)
    }
}