android - 无法在 Compose 中聚焦按钮
问题描述
我有这样一个简单的看法。在模拟器中,当我按下Tab键盘时,什么也没有发生。没有迹象表明按钮处于焦点状态,并且onClick
当我按下 时不会调用Enter。
注意:这是为了可访问性,即那些不能用手指点击并需要按钮具有焦点的指示器的人,或者那些在平板电脑+键盘中使用应用程序的人。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
Surface(color = MaterialTheme.colors.background) {
Button(onClick = { println("clicked") }) {
Text(text = "A Button")
}
}
}
}
}
请帮忙。Compose 版本是 1.0.5。
顺便一提,
- 我已经阅读了 Android Developers 中 Compose 文档的几乎所有页面,包括Compose 中的 Accessibility,但我找不到任何有用的信息来解决我的简单问题。
- Compose
TextField
可以通过按 Tab 或箭头键获得焦点。 - 我还尝试并排放置 View Button 和 Compose Button,只有 ViewButton 可以接收焦点。
更新
val iSource = remember { MutableInteractionSource() }
val focused by iSource.collectIsFocusedAsState()
val pressed by iSource.collectIsPressedAsState()
Button(
onClick = { println("clicked") },
Modifier.focusable(interactionSource = iSource),
) {
Text(text = "A Button (focused=${focused}, pressed=${pressed})")
}
这样,当我使用箭头键(向上/向下)导航时,“聚焦”变为真,但是:
- 没有重点指示。
- 按 Tab 仍然不起作用。
- 当它获得焦点时,按 Space 或 Enter 不会触发 onClick 侦听器。
解决方案
推荐阅读
- java - 在 Spring Boot 中将应用程序根 (/) 映射到默认登录页面 (index.jsp)
- java - Android MediaPlayer,如何将 InputStream 作为数据源传递给它?
- maven - Nexus rest api beta 返回两个唯一搜索结果
- hyperledger-fabric - 是否可以在不查询 couchDB 的情况下根据事件从 hyeperledger 读取数据?
- r - 如何在函数中包装均值和 CI 图
- c++ - GtkMessageDialog 未显示
- arrays - 为什么 char 数组在动态结构数组中不起作用?
- java - 如何在@Temporal 中仅从用户那里获取时间
- ms-access - 在 Access 的一个字段中计算日期之间的天数
- javascript - 在 React.js 中运行数组以获取 texture_type