首页 > 解决方案 > 无法在 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。

顺便一提,

  1. 我已经阅读了 Android Developers 中 Compose 文档的几乎所有页面,包括Compose 中的 Accessibility,但我找不到任何有用的信息来解决我的简单问题。
  2. ComposeTextField可以通过按 Tab 或箭头键获得焦点。
  3. 我还尝试并排放置 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})")
    }

这样,当我使用箭头键(向上/向下)导航时,“聚焦”变为真,但是:

  1. 没有重点指示。
  2. 按 T​​ab 仍然不起作用。
  3. 当它获得焦点时,按 Space 或 Enter 不会触发 onClick 侦听器。

标签: androidandroid-jetpack-composeandroid-accessibility

解决方案


推荐阅读