è possibile ignorare la di intercettare tutti gli eventi di tocco nella vostra attività, anche se si dispone alcune viste come ScrollView, Button, ecc. che consumeranno l'evento touch.
In combinazione con ViewGroup.requestDisallowInterceptTouchEvent
, è possibile disabilitare l'evento di tocco del ViewGroup. Ad esempio, se si desidera disabilitare tutto l'evento in qualche tocco ViewGroup, provate questo:
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
requestDisallowInterceptTouchEvent(
(ViewGroup) findViewById(R.id.topLevelRelativeLayout),
true
);
return super.dispatchTouchEvent(event);
}
private void requestDisallowInterceptTouchEvent(ViewGroup v, boolean disallowIntercept) {
v.requestDisallowInterceptTouchEvent(disallowIntercept);
int childCount = v.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = v.getChildAt(i);
if (child instanceof ViewGroup) {
requestDisallowInterceptTouchEvent((ViewGroup) child, disallowIntercept);
}
}
}
Override l'Attività # dispatchTouchEvent (..) metodo consente di intercettare tutti gli eventi tocco prima della Vista: s vederli . – Jens
@Jens è vero, ma non intercetta tocchi su 'DialogFragment' (perché appartiene forse ad un'altra finestra) –
Immagino tu abbia provato a mettere la tua finestra TYPE_SYSTEM_ALERT su tutto usando WindowManager # addView (..)? – Jens