lew*_*ort 5 android accessibility drag-and-drop
我正在尝试制作一个可访问的 Android 应用程序,并且我们正在实现一种特定类型的拖放 UI 小部件(带有“抓手”)手柄。
将此类小部件中的事件公开给像 TalkBack 这样的 AccessibilityService 的最佳方法是什么?我一直在查看有关可访问性的文档和有关拖放功能的文档,我认为处理此问题的最佳方法是分配一个AccessibilityDelegate添加适当实现的 ,或自定义触发可访问性操作。
我在我的应用程序FPlay中遇到了同样的问题:我有一个自定义的“滑块”控件,我想让 TalkBack 在用户滑动手柄时说出其不同的值。
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);
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
*值得注意:此解决方法之所以可行,是因为AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED此类中的其他任何地方都没有使用。
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |