【发布时间】:2022-08-03 17:37:25
【问题描述】:
我正在尝试找出创建此类设计的最佳方法:https://gyazo.com/bae04894f7ef079a06ad71f733026f33
https://gyazo.com/111eace0d8cdecdecad1c8a7b486faf7
我应该按照滚动视图的建议使用 HorizontallazyRow 还是我将如何去做?我是否还应该为 placeholdercard 中的每个项目创建 1 个可组合项,或者是否有更有效的方法来使用较新版本的 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 建议! - 不得不做一些 tweeks 但现在它完全有效!
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()
)
}
}
}
}
}
-
这回答了你的问题了吗? Snap to an index Lazyrow
-
我认为您的问题更侧重于捕捉屏幕中心的项目,而我的问题是创建一个包含各种项目的功能性 LazyRow。我确实发现捕捉机制很有趣,因此也会对其进行更多研究:) 感谢您的建议!
标签: android kotlin android-jetpack-compose scrollable lazycolumn