欢迎使用第二集“带Jetpack Compose更访问的图形”的第二集 - 在这篇博客文章中,我们将继续从第一篇中停止的地方。我们将考虑改善JetPack组合中图形的(物理)键盘访问。链接到第一部分:More Accessible Graphs with Jetpack Compose Part 1: Adding Content Description
在博客文章的末尾,我提到第二部分是关于键盘和切换访问的。在测试博客文章的代码后,我意识到开关访问零件不起作用。经过深入研究文档的深入研究之后,我承认我不会将其添加到这篇文章中,因为这需要大量研究。因此,在此“使用JetPack Compase更易于访问的图形” -BLOG POST系列中,可能至少有四个部分。
在第一篇博客文章中,我们添加了一个Higlighter
-component,这是我构建的线图顶部的覆盖层。然后,我们使其可集中并为可访问性服务添加了内容描述。
进行这些更改后,键盘用户已经可以专注于图的不同部分,但是有一个问题:图形传奇不可见。现在,您可能想知道这是否真的是一个问题 - 我们添加了内容描述,对吗?
如果您仅使用键盘,则无法使用内容描述。如果一个可以看到并使用硬件设备进行导航的人,则在当前状态下使用该图,他们可能会感到沮丧,因为这就是他们会得到的:
他们可以看到焦点发生了变化,但看不到单个值。如果我遇到这样的东西,我会认为该应用中有一个错误。
添加键盘交互
用户已经可以专注于每个部分,因此我们不再需要担心这一点。但是,我们需要一种方法来更改X轴上的当前重点位置 - 就像用户在图表上移动手指一样。
highlightedX
参数是控制X轴上当前突出显示位置的参数。当荧光笔部分获得焦点时,我们需要添加一种以编程方式更改它的方法。让我们首先添加一个函数来做到这一点:
@Composable
fun Highlighter(
...
setFocus: (Float) -> Unit
) { ... }
在父组件上存储highlightedX,
,我们定义了一个函数以更改突出显示的x位置的值:
Highlighter(
...
setFocus = { newX ->
highlightedX = newX
}
)
好吧,现在我们有一个可以控制X位置并切换X轴上的焦点位置的函数。我们想将当前专注的荧光笔部分的X位置传递到该功能,为此,我们附上一个onFocusChanged
-Modifier。
.onFocusChanged {
if (it.isFocused) {
setFocus(point.x)
}
}
在修饰符中,我们检查当前部分是否聚焦,如果是,则使用setFocus
功能,通过该当前专注的部分的X位置。
此更改后,我们已经有了工作代码 - 专注于显示图形标签的荧光笔部分,以便用户可以在该重点年度看到每个点的值。
我们仍然想做一个小调整。目前,如果要重点关注硬件设备和指针输入的组件,那么荧光笔的边界就可以看到。我们不想向指针输入显示荧光笔组件的边框,因为当用户使用指针输入时,已经存在不同的荧光笔(虚线)。
我们将通过添加边框颜色的状态,将其设置为透明的状态,然后在焦点更改时对其进行更新。
var color by remember { mutableStateOf(Color.Transparent) }
...
// Then on .onFocusChanged-modifier:
.onFocusChanged {
color = if (it.isFocused) focusedColor else Color.Transparent
...
}
我们使用该color
变量为每个荧光笔的边框颜色。
现在所有这些都按预期工作,如本视频所示:
视频显示了用户使用键盘导航时的焦点和标签文本更改。
You can find all the changes made in this commit.
包起来
在此博客文章中,我们进一步开发了Highlighter
组件,以允许与硬件键盘等辅助设备进行交互。这样,用户将不仅依赖于能够使用指针输入(例如触摸)。
第三篇博客文章将是关于以颜色以外的其他方式区分数据。