Można zastąpić przechwytywać wszystkie dotykowe wydarzenia w swojej działalności, nawet jeśli masz niektóre widoki, takie jak ScrollView, Button, itp., które pochłoną zdarzenie dotykowe.
Łącząc z ViewGroup.requestDisallowInterceptTouchEvent
, można wyłączyć wydarzenie dotykowe grupy ViewGroup. Na przykład, jeśli chcesz wyłączyć wszystkie dotykowego wydarzenie w pewnym ViewGroup, spróbuj tego:
@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);
}
}
}
Zastępowanie aktywności # dispatchTouchEvent (..) Metoda pozwala przechwytywać wszystkie zdarzenia dotykowe przed Widok: y je zobaczyć . – Jens
@Jens to prawda, ale nie przechwytuje akcentów na 'DialogFragment' (ponieważ może należeć do innego okna) –
Zgaduję, że próbowałeś umieścić swoje własne okno TYPE_SYSTEM_ALERT na szczycie wszystkiego przy użyciu WindowManager # addView (..)? – Jens