I\'m implementing custom keyboard (through custom view) for password field and trying add accessibility feature, so when user single press on view it should pronounce select
For those that come across this question and looking for a solution;
When accessibility (Talkback) is enabled, onTouchEvent
method is not called on single tap, it's called on double taps instead.
To catch single taps when accessibility is enabled, and/or override this behaviour, onHoverEvent
method of View
class should be overriden. By using this method, you can catch single touch down as ACTION_HOVER_ENTER
, move as ACTION_HOVER_MOVE
and up as ACTION_HOVER_EXIT
.
Also you can override this behaviour by modifying the action of caught MotionEvent
and sending it to onTouchEvent
method as shown below:
@Override
public boolean onHoverEvent(MotionEvent event) {
if (accessibilityManager.isTouchExplorationEnabled() && event.getPointerCount() == 1) {
final int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_HOVER_ENTER: {
event.setAction(MotionEvent.ACTION_DOWN);
} break;
case MotionEvent.ACTION_HOVER_MOVE: {
event.setAction(MotionEvent.ACTION_MOVE);
} break;
case MotionEvent.ACTION_HOVER_EXIT: {
event.setAction(MotionEvent.ACTION_UP);
} break;
}
return onTouchEvent(event);
}
return true;
}
When TalkBack is enabled a double tap is the equivalent of a single tap. That is, onTouchEvent will only be called when the user double taps a view/widget.