android - 三星 S10+ 辅助功能视图焦点问题与 TalkBack 开启
问题描述
我有一个视图,用户可以在其中输入目标、完成目标的日期和确认复选框。用户必须输入所有这些才能继续前进。因此,我检查是否有任何字段为空。这是代码。此代码有效。
private fun toggleInputRequiredError(
isErrorVisible: Boolean,
view: TextInputLayout,
errorText: String
) {
when (isErrorVisible) {
true -> {
view.error = errorText
}
else -> view.error = null
}
}
toggleInputRequiredError(
!state.isGoalChecked,
goalAffirmationCheckBoxErrorContainer,
getString(R.string.required_field)
).run {
if (!state.isGoalChecked) {
goalAffirmationCheckBox.isFocusable = true
goalAffirmationCheckBox.requestFocus()
goalAffirmationCheckBox.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
}
}
toggleInputRequiredError(
!state.isValidDateInput,
goalDateInputLayout,
getString(R.string.required_field)
).run {
if (!state.isValidDateInput) {
goalCompletionDateInput.isFocusable = true
goalCompletionDateInput.requestFocus()
goalCompletionDateInput.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
}
}
toggleInputRequiredError(
!state.isValidDescriptionInput,
goalDescriptionInputLayout,
getString(R.string.required_field)
).run {
if( !state.isValidDescriptionInput) {
goalDescriptionInput.isFocusable = true
goalDescriptionInput.requestFocus()
goalDescriptionInput.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
}
}
现在,除了最新的三星手机外,我必须在大多数手机上启用此视图的可访问性。Pixel XL 和三星 S8 都体现了所需的行为。这是显示此内容的图像
在较新的三星上,sendAccessibilityEvent似乎并没有真正关注需要解决的视图。这是一张图片,展示了三星 S10+ 和三星 Note 9 上的这种行为。
我在 XML 中设置了这些视图的内容描述。我注意到较新的三星手机会阅读屏幕上的“必填”文本,但不会专注于它。这意味着它会忽略 XML 中的内容描述。最后就是需要对焦的view好像没有遇到sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)事件
让我知道您是否对如何解决此问题有任何想法,或者如果您有任何建议我可以尝试
解决方案
抱歉,我知道这已经是差不多一年后了,但我们在运行 Android 10 的三星 Talkback 上发现了一个非常相似的问题。它在早期版本的 Android 上运行良好。
我们发现创建以下 kotlin 扩展功能似乎适用于所有版本的 Android,并且适用于三星语音助手和 Talkback。
希望这能够帮助其他面临类似问题的人。
fun View?.requestAccessibilityFocus(): View? {
this?.performAccessibilityAction(ACTION_ACCESSIBILITY_FOCUS, null)
this?.sendAccessibilityEvent(TYPE_VIEW_SELECTED)
return this
}
推荐阅读
- python - 使用 Telethon 自动登录 Telegram 客户端(python)
- ios - 循环标签视图 | SwiftUI | iOS 14
- python - 如何从 python 授权自己到 mulesoft/cloudhub 帐户?
- spring-boot - Spring boot 忽略 IntellijIdea 中的 application.properties 文件
- javascript - 为什么 setItem() 不给项目赋值?
- c++ - 即使目录不包含文件名,文件名方法也会返回点
- android - 如何在 Android 中用 LiveData 表示 Observable.empty()?
- python - 用多列对 pandas DataFrame 进行分组
- reactjs - 反应类型错误:this.state 为空
- javascript - FCM 推送通知显示没有 onMessage