java - 使用 TalkBack 的 Android 辅助功能 : Adding a 'role' to a custom view object is not reading as a button or a link

标签 java android accessibility talkback

我正在努力使 HubDisclaimerView 可通过 TalkBack 访问,但未应用“按钮”或“链接”的角色。

我已经设置了一个内容描述来宣布文本是什么,但是 View 没有继承自 Button 或 ImageView。它确实有一个 onClickListenerisClickable=true。然而,在 TalkBack 模式或本地上下文菜单中没有显示“双击以...”或“按钮”或“链接”辅助功能。

我想知道是否有解决方案可以将自定义 View 设为可访问性链接? AccessibilityEvent API 似乎不是正确的方向,因为我希望将其添加到充当条款和条件链接的列表中的一行。

最佳答案

您可以在 onInitializeAccessibilityNodeInfo() 中添加信息,以告知 Talkback 等无障碍服务该 View 是可点击的。我没有你的代码,但写了一个简单的自定义 View 来证明这一点:

class MyTextView : TextView {

    constructor(context: Context) : super(context)

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs)

    constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle)

    // ... other override methods

    override fun onInitializeAccessibilityNodeInfo(info: AccessibilityNodeInfo?) {
        super.onInitializeAccessibilityNodeInfo(info)
        // With `null` as the second argument to `AccessibilityAction`, Talkback announces
        // "double tap to activate". If a custom string is provided, 
        // Talkback announces "double tap to <custom string>".
        val customClick = AccessibilityAction(AccessibilityNodeInfo.ACTION_CLICK, "foo")
        info?.addAction(customClick)
    }
}

添加角色并不是真正的原因,因为 Talkback 会通过这个小改动发出“双击 X”的通知。如果你绝对想设置角色,你可以这样做(但同样,我不确定这样做是否有任何收获):

override fun getAccessibilityClassName(): CharSequence {
    return Button::class.java.name
}

这使得 Talkback 将“按钮”添加到公告中,但以这种方式添加角色是一种 hack。仅因为您设置了 accessibilityClassName,无法保证 Talkback 会继续将 View 作为按钮宣布。坚持添加 AccessibilityNodeInfo.ACTION_CLICK

关于java - 使用 TalkBack 的 Android 辅助功能 : Adding a 'role' to a custom view object is not reading as a button or a link,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56065598/

相关文章:

java - org.openqa.selenium.WebDriverException :java. io.IOException 异常

java - 无法从 mapStruct Autowiring Mapper

java - 在 Java 中,努力返回颜色

php - JsonException : No value for userid 异常

accessibility - Protractor - 辅助功能测试结果 - 分析结果

javascript - HTML 语义 - 充当 anchor 的按钮

java - VerifyError : class net. sf.cglib.core.DebuggingClassWriter 覆盖 final方法访问

android - 如何使用 Gradle 脚本为应用程序构建 android 包?

java - Archos 101 Tablet System.load() 在加载 ndk 库时失败

accessibility - 您可以强制屏幕阅读器将数字读取为单个数字吗?