android - 如何拦截一个活动中的所有点击事件?
问题描述
我有一些我已经执行view.setOnClickListener(listener)
的观点。
我目前想拦截所有点击事件,检查它们发生的位置并在将事件交给正常处理之前进行一些预处理。这可能吗?
private View.OnTouchListener exampleListener = new View.OnTouchListener()
{
// some kind of middleware for click events basically
@Override
public boolean onTouch(View v, MotionEvent event)
{
int action = event.getAction();
if (isAClick(action) && inSomeRectOfScreen(action))
{
doSomething();
return false; // pass handling to normal view hierarchy
}
else
{
return false; // pass handling to normal view hierarchy
}
}
};
解决方案
尝试像这样从父级向所有子级调用 recrecive 函数
public void setupUI(View view) {
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
doSomething();
return false;
}
});
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
}