【问题标题】:Android - Adding custom Modifiers in jetpackAndroid - 在 jetpack 中添加自定义修饰符
【发布时间】:2023-01-03 21:26:07
【问题描述】:
我想添加一些语义
contentDescription = "SomeID"
testTag = "SomeID"
一些 UI 元素
目前的做法是这样的
modifier = Modifier.padding(top = 10).semantics {
testTag = "SomeID"
contentDescription = "SomeID"
},
如何编写一个自定义扩展来接收输入数据并将其分配给语义
modifier = Modifier.padding(top = 10).addSemantics(id = "SomeID"),
【问题讨论】:
-
请注意,contentDescription 应该是解释 UI 元素角色的人类可读字符串。通过 TalkBack 和其他辅助技术向用户读出内容描述。它不应该是一个标识符。话虽这么说,已经写了很多关于创建自定义修饰符的文章,例如this Medium post。
标签:
android
android-jetpack-compose
jetpack
【解决方案1】:
你可以这样做
fun Modifier.customModifier(paddingValues: PaddingValues, description: String) = this.then(
padding(paddingValues).semantics {
testTag = description
contentDescription = description
}
)
当您希望您的 Modifier 具有内存或访问 Comopsable 范围以使用 LaunchedEffect 等时,您可以使用 composed 作为
fun Modifier.customModifierWithMemory(paddingValues: PaddingValues, description: String) =
composed {
LaunchedEffect(key1 = Unit){
// Do something here
}
var memory by remember {
mutableStateOf(0)
}
Modifier
.padding(paddingValues)
.semantics {
testTag = description
contentDescription = description
}
}