我如何覆盖android.widget.TextView的Accessibility className

时间:2017-10-03 22:02:24

标签: java android accessibility

我想"对话" anounces标准TextView作为按钮。 我试着用这种方式

public class AccessibilityDelegateButton extends AccessibilityDelegateCompat {
    private CharSequence  className;
    public AccessibilityDelegateButton(CharSequence className) {
        super();
        this.className =className;
    }

    @Override
    public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
        super.onPopulateAccessibilityEvent(host,event);
        event.setClassName(className);
    }

    @Override
    public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
        super.onInitializeAccessibilityNodeInfo(host,info);
        info.setClassName(className);
    }
}

和活动:

    TextView finishButton= new TextView(this);
    ViewCompat.setAccessibilityDelegate(finishButton, new AccessibilityDelegateButton(Button.class.getName()));

但它不起作用......

1 个答案:

答案 0 :(得分:0)

official documentation

中所述
  

在API 23之前的平台版本上,在主机方法之前调用android.widget。*包中的视图的委托方法。这可以防止某些属性(如类名称)被修改

     

从API 23开始,委托方法在主机方法之后调用,所有属性都要修改,而不会被主机类覆盖。

根据note

,AccessibilityDelegateCompat应该是相同的

您是否使用API​​<也许23? 在这种情况下,您必须使用onInitializeAccessibilityNodeInfo

View.AccessibilityDelegateCompat方法设置类名