如gif中所示
当触摸包含文本、空格和LazyRowForIndexed
的Column
时,涟漪不会以圆周运动传播。即使触摸水平列表,也会获得触摸效果。
@Composable
fun Chip(modifier: Modifier = Modifier, text: String) {
Card(
modifier = modifier,
border = BorderStroke(color = Color.Black, width = Dp.Hairline),
shape = RoundedCornerShape(8.dp)
) {
Row(
modifier = Modifier.padding(start = 8.dp, top = 4.dp, end = 8.dp, bottom = 4.dp),
verticalAlignment = Alignment.CenterVertically
) {
Box(
modifier = Modifier.preferredSize(16.dp, 16.dp)
.background(color = MaterialTheme.colors.secondary)
)
Spacer(Modifier.preferredWidth(4.dp))
Text(text = text)
}
}
}
@Composable
fun TutorialSectionCard(model: TutorialSectionModel) {
Column(
modifier = Modifier
.padding(top = 8.dp)
.clickable(onClick = { /* Ignoring onClick */ })
.padding(16.dp)
) {
Text(text = model.title, fontWeight = FontWeight.Bold, style = MaterialTheme.typography.h6)
Spacer(Modifier.preferredHeight(8.dp))
Providers(AmbientContentAlpha provides ContentAlpha.medium) {
Text(model.description, style = MaterialTheme.typography.body2)
}
Spacer(Modifier.preferredHeight(16.dp))
LazyRowForIndexed(items = model.tags) { _: Int, item: String ->
Chip(text = item)
Spacer(Modifier.preferredWidth(4.dp))
}
}
}
@Preview
@Composable
fun TutorialSectionCardPreview() {
val model = TutorialSectionModel(
clazz = MainActivity::class.java,
title = "1-1 Column/Row Basics",
description = "Create Rows and Columns that adds elements in vertical order",
tags = listOf("Jetpack", "Compose", "Rows", "Columns", "Layouts", "Text", "Modifier")
)
Column {
TutorialSectionCard(model)
TutorialSectionCard(model)
TutorialSectionCard(model)
}
}
应该做些什么来产生循环效应,而不是当列表本身或列表中的一个项目被触摸或滚动时?
4条答案
按热度按时间d8tt03nd1#
您必须将主题应用于可组合对象,这反过来又提供了默认的涟漪工厂,或者您必须显式地设置涟漪:
或
(As的compose版本1.0.0-alpha 09,似乎没有办法防止涟漪显示时,内容滚动)
0kjbasz62#
我用的是这种方法:
whitzsjs3#
我还想出了如何只为卡片而不是包含标签的可滚动列表保留涟漪。为了防止ripple只在卡片间移动,使用
Box
,它将它的子元素作为一个堆栈,并将clickable添加到包含标题和文本的部分。wvt8vs2t4#
与@jns相同,只是多加了一行