如何获得应用程序的“顶级”视图(包含Activity和所有DialogFragments)?我需要拦截所有触摸事件来处理DialogFragment和我的Activity之间的某些View的动作.
我试图通过活动窗口的装饰视图抓住它们(事件)而没有运气:
getWindow().getDecorView().setOnTouchListener(...);
解决方法
您可以覆盖
Activity.dispatchTouchEvent
以拦截活动中的所有触摸事件,即使您有一些将消耗触摸事件的ScrollView,Button等视图.
结合使用ViewGroup.requestDisallowInterceptTouchEvent
,您可以禁用ViewGroup的触摸事件.例如,如果要禁用某些ViewGroup中的所有触摸事件,请尝试以下操作:
@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); } } }