致力于增强我的应用程序的可访问性。
从文档中,我可以看到Card将onClick和onClickLabel作为API的一部分。
对于没有onClick的可组合性,我们可以使用Modifier.clickable或Modifier.semantics。
但是Button,IconButton,FloatingActionButton,TextButton和OutlinedButton呢?
可组合的,它将onClick作为API的一部分,但没有onClickLabel。
这如预期的那样起作用。但是,这是编写代码的正确方式吗?
IconButton(
onClick = navigateUp,
modifier = Modifier.clickable(
onClickLabel = "Navigate up",
onClick = {},
)
) {
Icon(
imageVector = Icons.Rounded.ArrowBack,
contentDescription = stringResource(
id = R.string.top_app_bar_content_description_navigate_up,
),
)
}这似乎太令人困惑了,因为IconButton期望onClick。所以我不能完全使用Modifier.clickable或Modifier.semantics。
类似地,Modifier.clickable也期望onClick。
因此,对于一个可组合的组件,我有两个onClick,这很容易导致很多很难调试的bug。
更改的原因,
若要阅读“双击以向上导航”,而不是默认的“双击以激活”,请阅读。
P.S:
撰写版本- 1.0.4
发布于 2021-10-22 23:22:33
在此场景中不需要Modifier.clickable,因为:
onClick lambda处理单击。Icon有一个可访问性的contentDescription字段。所以你需要的就是这个
IconButton(
onClick = navigateUp,
) {
Icon(
imageVector = Icons.Rounded.ArrowBack,
contentDescription = stringResource(
id = R.string.top_app_bar_content_description_navigate_up,
),
)
}发布于 2022-04-26 17:38:56
这似乎不是最漂亮的解决方案,但我最终做到了:
IconButton(
modifier = Modifier.size(40.dp).clearAndSetSemantics {
this.onClick(label = closeLabelDescription, action = null)
this.contentDescription = closeDescription
this.role = Role.Button
},
onClick = onClickClose,
) {
Icon(
painter = painterResource(R.drawable.ic_close),
tint = RiotWhite,
contentDescription = null
)
}https://stackoverflow.com/questions/69683733
复制相似问题