import
android.os.Bundle
import
androidx.activity.ComponentActivity
import
androidx.activity.compose.setContent
import
androidx.compose.foundation.ExperimentalFoundationApi
import
androidx.compose.foundation.background
import
androidx.compose.foundation.border
import
androidx.compose.foundation.layout.*
import
androidx.compose.foundation.lazy.*
import
androidx.compose.material.Text
import
androidx.compose.runtime.Composable
import
androidx.compose.ui.Alignment
import
androidx.compose.ui.Modifier
import
androidx.compose.ui.graphics.Color
import
androidx.compose.ui.unit.dp
import
com.gfg.lazycomponents.ui.theme.GreenGfg
import
com.gfg.lazycomponents.ui.theme.LazyComponentsTheme
class
MainActivity : ComponentActivity() {
private
val numbers: Array<Int> = Array(
100
) { it +
1
}
@ExperimentalFoundationApi
override fun onCreate(savedInstanceState: Bundle?) {
super
.onCreate(savedInstanceState)
setContent {
LazyComponentsTheme {
Column(
modifier = Modifier
.fillMaxSize()
.background(Color.White)
) {
Column(Modifier.fillMaxHeight(
0
.5f)) {
Text(
text =
"Row"
,
color = Color.Black,
modifier = Modifier.padding(start =
8
.dp)
)
LazyRowExample(numbers = numbers)
Text(
text =
"Column"
,
color = Color.Black,
modifier = Modifier.padding(start =
8
.dp)
)
LazyColumnExample(numbers = numbers)
}
Column(Modifier.fillMaxHeight()) {
Text(
text =
"Grid"
,
color = Color.Black,
modifier = Modifier.padding(start =
8
.dp)
)
GridExample(numbers = numbers)
}
}
}
}
}
}
@Composable
fun LazyRowExample(numbers: Array<Int>) {
LazyRow(
contentPadding = PaddingValues(
8
.dp),
horizontalArrangement = Arrangement.spacedBy(
8
.dp)
) {
item {
RowItem(number =
0
)
}
items(
10
) {currentCount->
RowItem(number = currentCount)
}
items(numbers) {arrayItem->
RowItem(number = arrayItem)
}
itemsIndexed(numbers) { index: Int, item: Int ->
RowItem(number = index)
}
}
}
@Composable
fun RowItem(number: Int) {
Row(
modifier = Modifier
.size(
100
.dp)
.background(Color.White)
.border(
1
.dp, GreenGfg),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Center
) {
Text(text =
"This Is Item Number $number"
, color = GreenGfg)
}
}
@Composable
fun ColumnItem(number: Int) {
Column(
modifier = Modifier
.fillMaxWidth()
.height(
30
.dp)
.background(Color.White)
.border(
1
.dp, GreenGfg),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text =
"This Is Item Number $number"
, color = GreenGfg)
}
}
@Composable
fun LazyColumnExample(numbers: Array<Int>) {
LazyColumn(
contentPadding = PaddingValues(
8
.dp),
verticalArrangement = Arrangement.spacedBy(
8
.dp)
) {
item {
ColumnItem(number =
0
)
}
items(
10
) {currentCount->
ColumnItem(number = currentCount)
}
items(numbers) {arrayItem->
ColumnItem(number = arrayItem)
}
itemsIndexed(numbers) { index, item ->
ColumnItem(number = index)
}
}
}
@ExperimentalFoundationApi
@Composable
fun GridExample(numbers: Array<Int>) {
LazyVerticalGrid(
cells = GridCells.Fixed(
2
),
contentPadding = PaddingValues(
8
.dp),
) {
item {
RowItem(number =
0
)
}
items(
10
) {
RowItem(number = it)
}
items(numbers) {
RowItem(number = it)
}
itemsIndexed(numbers) { index, item ->
RowItem(number = index)
}
}
}