当前位置: 首页 > 知识库问答 >
问题:

带Talkback的Android可访问性:向自定义视图对象添加“角色”并不是作为按钮或链接阅读

蒲寂离
2023-03-14

我正在努力使HubDisclaimerView可以通过TalkBack访问,并且“按钮”或“链接”的角色没有被应用。

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

我想知道是否有一个修复使一个自定义视图链接的可访问性的目的?AccessibilityEvent API似乎不是正确的方向,因为我希望将它添加到充当术语和条件链接的列表中的一行中。

共有1个答案

陶鹏
2023-03-14

您可以在OnInitializeAccessibilitynodeInfo()中添加信息,以告诉辅助功能服务(如Talkback)视图是可单击的。我没有您的代码,但编写了一个微不足道的自定义视图来演示这一点:

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在公告中添加“按钮”,但以这种方式添加角色是一种攻击。不能保证Talkback会因为您设置了AccessibilityClassName而继续将视图作为按钮宣布。继续添加accessibilitynodeInfo.action_click

 类似资料:
  • 我对Android开发非常陌生,这是我的第一个Android应用程序。 下面是我的MainActivity布局: 这是MainActivity的组件树

  • 我在这里看到了一些例子:http://docs.oracle.com/javase/7/docs/api/javax/swing/joptionpane.html 它似乎表明我应该用一个自定义的按钮列表来替换我的组合框,这不是我想要的。我需要有3个按钮(好的,跳过,取消),以及项目列表。 更新:为了说明我的GUI应该是什么样子: null 目前我的代码如下所示: 灵感来自:Java:showInp

  • 我正在努力修改MUI next(v1)中的按钮颜色。 我该如何设置muitheme,使其行为与bootstrap相似,这样我就可以用“btn危险”表示红色,“btn成功”表示绿色? 我尝试了自定义,但它不能正常工作(悬停颜色不会改变),而且似乎是重复的。我有什么选择?

  • 我正在尝试使用AccessibilityManager和TalkBack触发自定义。 该事件的用例是,当用户单击操作栏时,片段会轮询对象列表,然后根据列表的大小调整其 AccessibilityEvent 内容。 当我尝试运行它时,我没有收到预期的Talkback消息。我很确定我在实例化AccessibilityEvent时错过了一些基本的东西。 我也不确定我是否需要使用,或者如何在这里应用s,因

  • > 标高,同时具有自定义可绘制。 在用户触摸的地方启动涟漪效果。

  • 在新的Google Maps for Android API v2中,我可以很容易地获得自定义标记和信息窗口来显示。然而,我试图在我的信息窗口中设置多个按钮,每个按钮执行不同的操作,但问题是,map将InfoWindow视为它自己的按钮对象(无论我在哪里单击InfoWindow,它都会按下整个按钮)。有人知道如何更多地定制这个吗?