首页 > 解决方案 > 如何拦截一个活动中的所有点击事件?

问题描述

我有一些我已经执行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
        }
    }
};

标签: android

解决方案


尝试像这样从父级向所有子级调用 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);
            }
        }
    }
}

推荐阅读