AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED
。由于这个原因,此解决方案仅适用于API 16+(对我来说足够了,我从未尝试将其移植到较低的API)。public final class BgSeekBar extends View {
...
@Override
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED)
event.setEventType(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
return super.dispatchPopulateAccessibilityEvent(event);
}
//When this method is called from within onTouchEvent(), fromUser is true
private void setValue(int value, boolean fromUser, boolean usingKeys) {
if (value < 0)
value = 0;
else if (value > max)
value = max;
if (this.value != value) {
this.value = value;
if (listener != null)
listener.onValueChanged(this, value, fromUser, usingKeys);
updateBar();
if (fromUser)
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
}
}
...
}
*值得注意的是,这种解决方法之所以可行,是因为在该类中没有使用AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED
。