如何获得应用程序的“顶层”View
(它包含Activity
和所有DialogFragment
)?我需要截取所有的触摸事件来处理一些View
在DialogFragment
和我的Activity
之间的运动。
我试图通过Activity的Window
的装饰视图来捕捉它们(事件),但没有成功:
getWindow().getDecorView().setOnTouchListener(...);
发布于 2015-06-04 12:01:03
您可以覆盖Activity.dispatchTouchEvent
来截获activity中的所有触摸事件,即使您有一些像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);
}
}
}
发布于 2021-05-21 10:06:57
如果你想知道如何在DialogFragments
中拦截所有的触摸事件,你可以这样做:
abstract class BaseDialogFragment : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return object : Dialog(requireContext()){
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
// do your thing here
return super.dispatchTouchEvent(ev)
}
}
}
}
https://stackoverflow.com/questions/13252904
复制相似问题