以前都是使用 RecyclerView 建立可以捲動(滑動)的清單,但是 RecyclerView 使用起來有一點小麻煩,現在 Jetpack Compose 使用 LazyColumn 非常方便就可以達成:
嗯...看起來不能滑動啊
那我們再把內容放多一點,就會自動可以滑動了:
稍加調整,就可以建立「聊天清單」了!
如果需要左右滑動則是換成 LayRow 。
參考資料:
Android Developers - Lists and grids
// import androidx.compose.foundation.lazy.LazyColumn
// import androidx.compose.material3.Text
@Composable
fun ListTest(modifier: Modifier = Modifier) {
val names = listOf("Android", "iOS", "Windows", "macOS", "Linux")
LazyColumn() {
items(
names.size,
itemContent = { index ->
Text(text = names[index])
}
)
}
}
嗯...看起來不能滑動啊
那我們再把內容放多一點,就會自動可以滑動了:
@Composable
fun ListTest(modifier: Modifier = Modifier) {
val names = (1..100).map { "Item $it" }
LazyColumn() {
items(
names.size,
itemContent = { index ->
Text(text = names[index])
}
)
}
}
稍加調整,就可以建立「聊天清單」了!
//import androidx.compose.foundation.Image
//import androidx.compose.foundation.layout.Arrangement
//import androidx.compose.foundation.layout.Column
//import androidx.compose.foundation.layout.Row
//import androidx.compose.foundation.layout.Spacer
//import androidx.compose.foundation.layout.fillMaxHeight
//import androidx.compose.foundation.layout.fillMaxWidth
//import androidx.compose.foundation.layout.size
//import androidx.compose.foundation.lazy.LazyColumn
//import androidx.compose.material3.Divider
//import androidx.compose.material3.Text
//import androidx.compose.ui.graphics.Color
//import androidx.compose.ui.res.painterResource
/**
* 自訂資料類別
*/
data class ListItem(val title: String, val content: String)
@Composable
fun ListTest(modifier: Modifier = Modifier) {
val items = (1..100).map { ListItem("標題 $it", "內容 $it") }
LazyColumn() {
items(
items.size,
itemContent = { index ->
val item = items[index]
Surface(
modifier = Modifier
.fillMaxSize()
.padding(4.dp)
) {
Row() {
Image(
painter = painterResource(id = R.drawable.ic_launcher_background),
contentDescription = null,
modifier = Modifier
.size(80.dp)
)
Column(
modifier = Modifier
.fillMaxHeight()
.padding(start = 8.dp),
verticalArrangement = Arrangement.Center
) {
Text(
text = item.title,
style = MaterialTheme.typography.headlineSmall
)
Spacer(Modifier.padding(vertical = 8.dp))
Text(text = item.content)
}
}
}
// 黑色分隔線
Divider(
thickness = 0.5.dp,
color = Color.Black,
modifier = Modifier
.fillMaxWidth()
.padding(8.dp)
)
}
)
}
}
如果需要左右滑動則是換成 LayRow 。
參考資料:
Android Developers - Lists and grids
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com