我有一个扩展SeekBar的自定义控件,其中覆盖了onInitializeAccessibilityNodeInfo,如下所示:

@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    info.setClassName(TextView.class.getName());
}


然后,我将内容描述设置为此控件的“我的控件”,但是当可访问性成为该控件的焦点时,对讲仍会说“我的控件,%x%”。我不希望它说出进度,即“ x%”。与其说我想覆盖对讲文本,不如说“ x percent ...”,而是宣布我设置的自定义文本,例如“选择了x值”。怎么做?

最佳答案

我在C#中的Xamarin.Android中做了类似的事情,但是代码应该足够容易地移植回Java。另外,请记住,突出显示控件时,这些更改将覆盖初始对讲。

首先在textView上跟踪值集:

textView.AccessibilityLiveRegion = AndroidViews.AccessibilityLiveRegion.Assertive;


然后,我必须创建自己的自定义AccessibilityDelegate

public class CustomSeekbarDelegate : Android.Views.View.AccessibilityDelegate
{
    public override void OnInitializeAccessibilityEvent(AndroidViews.View host, AccessibilityEvent e)
    {
        //NOTE: Don't call base to prevent seekbar talkback percentage
    }
}

seekBar.SetAccessibilityDelegate(new CustomSeekbarDelegate());


首次突出显示时,可能有一种方法可以同时保留初始语音控件的可访问性,但是在线上并没有太多内容,这足以满足我们的需求。另外,我没有更多时间尝试使它正常工作。

08-05 11:36