Jetpack Compose:如何用Horizontal LazyRow实现指定横向列表设计?
问题与解决方案
我正尝试确定实现某参考设计的最佳方案,请问我是否应采用推荐的Horizontal LazyRow搭配ScrollView来实现?或是有其他实现思路?另外,是否需要为PlaceholderCard的每个条目创建单独的Composable,还是Jetpack Compose新版本有更高效的实现方式?感谢您的反馈!
当前初始代码
@Composable fun MainContent( placeholderItems: List<String> ) { val lazyListState: LazyListState = rememberLazyListState() Column( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Text( modifier = Modifier .padding(16.dp) .fillMaxWidth(), text = "Example Horizontal LazyRow" ) LazyRow( modifier = Modifier.fillMaxWidth(), contentPadding = PaddingValues(8.dp), verticalAlignment = Alignment.CenterVertically ) { items(items = placeholderItems) { itemMessage: String -> PlaceholderCard(itemMessage) } } } }
更新方案(已解决)
此方案已解决问题!感谢@Sadegh.t的建议!我做了一些调整,现在可以完全正常运行!
data class Items( val num: Int, val id: UUID = UUID.randomUUID() ) @OptIn(ExperimentalMaterial3Api::class) @Composable fun ItemView(modifier: Modifier = Modifier, title: String, selected: Boolean = false) { Card( modifier = if (!selected) modifier .height(80.dp) .width(95.dp) else modifier .height(100.dp) .width(120.dp), shape = RoundedCornerShape(16.dp), elevation = if (selected) CardDefaults.cardElevation(24.dp ) else CardDefaults.cardElevation(4.dp) ) { Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically ) { Text(text = title, modifier = Modifier.fillMaxWidth() , textAlign = TextAlign.Center) } } } @Composable fun NumberList(list: List<Items>) { Box(modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) { LazyRow(state = rememberLazyListState()) { items(50, key = { it }) { if (it == 2) { ItemView( title = it.toString(), modifier = Modifier .padding(start = 16.dp, end = 8.dp, bottom = 16.dp, top = 8.dp) .fillMaxWidth() .height(80.dp) , selected = true ) }else { ItemView( title = it.toString(), modifier = Modifier .padding(start = 16.dp, end = 8.dp, bottom = 16.dp, top = 8.dp) .fillMaxWidth() ) } } } } }
内容的提问来源于stack exchange,提问作者Josef M
相关产品推荐
相关产品推荐

