#1 Lazy Column
#1-1 ๊ฐ์
๋ชฉ๋ก ๋ฐ ๊ทธ๋ฆฌ๋ | Jetpack Compose | Android Developers
์ด ํ์ด์ง๋ Cloud Translation API๋ฅผ ํตํด ๋ฒ์ญ๋์์ต๋๋ค. ๋ชฉ๋ก ๋ฐ ๊ทธ๋ฆฌ๋ ์ปฌ๋ ์ ์ ์ฌ์ฉํด ์ ๋ฆฌํ๊ธฐ ๋ด ํ๊ฒฝ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฅํ์ธ์. ๋ง์ ์ฑ์์ ํญ๋ชฉ์ ์ปฌ๋ ์ ์ ํ์ํด
developer.android.com
Lazy lists๋ Jetpack Compose ๋ฒ์ ์์์ RecyclerView๋ค. Lazy lists๋ ๊ฐ๋ก๋ก ์์ดํ ์ด ์ ๋ ฌ๋๋ Lazy Row์ ์ธ๋ก๋ก ์์ดํ ์ด ์ ๋ ฌ๋๋ Lazy Column์ด ์๋๋ฐ, ์ฃผ๋ก ํ์๊ฐ ์ฐ์ธ๋ค. ๋ณธ ๊ฒ์๊ธ์์ Lazy Column์ ๊ตฌํํด๋ณธ๋ค.
#1-2 ๊ตฌ์กฐ
LazyColumn {
// Add a single item
item {
Text(text = "First item")
}
// Add 5 items
items(5) { index ->
Text(text = "Item: $index")
}
// ↑ ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ ๊ด๊ณ ↓
/* List<T> ํ์
์ ๋ฐ๋ items
* import androidx.compose.foundation.lazy.items ํ์
*/
items(messages) { message ->
MessageRow(message)
}
}
LazyColumn ๋ด๋ถ(LazyListScope)์๋ item { ... } ๋ฐ items { ... }์ ์ฌ์ฉํ ์ ์๋ค. ์ด๊ฒ ๋์ด๋ค. ๊ธฐ์กด ์ ํต์ ์ธ ๋ฐฉ์์ RecyclerView์ ๋น๊ตํ๋ฉด ์ด๋ง์ด๋งํ๊ฒ ๊ฐ๋จํ ์ฝ๋๋ค. ์ฝ๋๋ ๊ฐ๋จํ์ง๋ง, ๊ทธ (์ปดํจํ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ฝ์ด๋ผ๋) ํจ๊ณผ๋ ๋์ผํ๋ค. ์ฌ๋ด์ผ๋ก LazyColumn์ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํฌ๋กค ๊ฐ๋ฅํ๊ธฐ์ ๊ด๋ จํ Modifier ๋ฉ์๋๋ฅผ ํธ์ถํ ํ์๊ฐ ์๋ค.
#2 Lazy Column ์ฌ์ฉ ์์
// package com.example.lazycolumn
import android.os.Bundle
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.sp
import com.example.lazycolumn.ui.theme.LazyColumnTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
LazyColumnTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
val list = ArrayList<String>()
for (i: Int in 1..20) {
list.add("$i")
}
val modifier = Modifier.fillMaxSize()
LazyColumnExample(list, modifier)
}
}
}
}
}
@Composable
fun LazyColumnExample(itemsParam: List<String>, modifierParam: Modifier = Modifier) {
val context = LocalContext.current
LazyColumn(
modifier = modifierParam
) {
items(itemsParam) {
val modifier = Modifier.clickable {
Toast.makeText(context, "Clicked item $it", Toast.LENGTH_SHORT).show()
}
TextExample("$it", modifier)
}
}
}
@Composable
fun TextExample(
name: String,
modifierParam: Modifier = Modifier,
fontSizeParam: TextUnit = 40.sp
) {
Text(
text = "$name",
modifier = modifierParam,
fontSize = fontSizeParam,
textAlign = TextAlign.Center
)
}
20๊ฐ์ ์์ดํ ์ ์ฃผ์ ์์ผฐ๊ณ ๊ฐ ์์ดํ ์ Modifier.clickable()๋ฅผ ์ ๋ฌํด (ํ ์คํธ ๋ฉ์์ง๋ฅผ ํ์ํ๋) ํด๋ฆญ ๋์์ ๊ตฌํํ๋ค. ์ฌ๊ธฐ์ Text()๋ ์ผ์ข ์ TextButton์ฒ๋ผ ๋์ํ๋ค.
#3 ์๋ ํ์ธ
#4 ์์ฝ
LazyColumn์ ์ฌ์ด RecyclerView๋ค.
#5 ์์ฑ๋ ์ฑ
android-practice/jetpack-compose/LazyColumn at master · Kanmanemone/android-practice
Contribute to Kanmanemone/android-practice development by creating an account on GitHub.
github.com
'๊นจ์ ๊ฐ๋ ๐ > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] Jetpack Compose - State Remembering (0) | 2024.07.23 |
---|---|
[Android] Jetpack Compose - State ๊ธฐ์ด (0) | 2024.07.22 |
[Android] Jetpack Compose - Button (0) | 2024.07.22 |
[Android] Jetpack Compose - Layout, Arrangement, Alignment (0) | 2024.07.22 |
[Android] Jetpack Compose - Modifier (0) | 2024.07.22 |