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