Sie die außer Kraft setzen können alle Touch-Ereignisse in Ihrer Tätigkeit abzufangen, auch wenn Sie einige Ansichten wie ScrollView, Button usw., die das Berührungsereignis verbrauchen.
Kombinieren mit ViewGroup.requestDisallowInterceptTouchEvent
, können Sie das Touch-Ereignis der ViewGroup deaktivieren. Zum Beispiel, wenn Sie alle Berührungsereignis in irgendeiner Viewgroup deaktivieren möchten, versuchen Sie dies:
@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);
}
}
}
die Aktivität # dispatchTouchEvent Aufschalten (..) Methode ermöglicht es Ihnen, alle Touch-Ereignisse vor der Ansicht abfangen: s sehen, wie sie . – Jens
@Jens es ist wahr, aber es berührt keine Berührungen auf 'DialogFragment' (weil es vielleicht zu einem anderen Fenster gehört) –
Ich vermute, Sie haben versucht, Ihr eigenes TYPE_SYSTEM_ALERT Fenster über alles mit WindowManager # addView (..) zu setzen? – Jens