【问题标题】:Automatic Android Click/Tap tracking自动 Android 点击/点击跟踪
【发布时间】:2014-01-09 18:25:47
【问题描述】:

是否有一种巧妙的方法可以在用户每次点击或点击屏幕时“做某事”?我想知道他们点击了哪个视图,并且不必用自定义视图替换我所有的标准视图。

基本上,我想在我的应用中添加点击跟踪以帮助进行分析。我们已经有了页面跟踪(通过为每个活动使用共享超类),但在某些情况下页面跟踪还不够,我们实际上想要跟踪点击。

如何在用户每次点击屏幕上的视图时执行一个函数?

【问题讨论】:

    标签: android analytics


    【解决方案1】:

    在您的每个活动中,只需在onCreate 的末尾添加这个(如果您的所有活动都是自定义活动的子类,这尤其容易,因为您只需要编写一次):

    getWindow().getDecorView().findViewById(android.R.id.content).setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent e) {
            //handle your code here
            return false;//don't absorb the touch.
        }
    });
    

    编辑

    上面的代码不容易识别出哪个Views 被触摸了。下面的代码将。请注意,如果有问题的View 已经注册了onTouch 事件,这可能会破坏其他onTouchListeners。如果没有,这将非常有效。它使用droidQuery 库来选择层次结构中的所有视图,并使用上面的代码来处理触摸而不吸收事件。最好的地方是在onCreate 的末尾,在每个Activity

    首先,选择您想要的架构的最高级别。如果你的布局的根视图有一个 id,那将是最好的:

    $.with(this, R.id.root_id)
    

    如果没有,请添加一个,或选择最顶层的视图(在您的布局上方)。请注意,对于分析,这可能会提供一些您不需要的结果:

    $.with(this).selectAll()
    

    现在,在此选择的末尾,附加以下内容:

    .each(new Function() {
        @Override
        public void invoke($ d, Object... args) {
            d.view(0).setOnTouchListener(new View.OnTouchListener() {
                public boolean onTouch(View v, MotionEvent e) {
                    //do something with the clicked view, such as:
                    handleTouch(v, e);
                    return false;//don't absorb the touch.
                }
            })
        }
    });
    

    然后有一个新方法:

    private void handleTouch(View v, MotionEvent e) {
        //handle the view touch.
    }
    

    【讨论】:

    • 这会告诉我点击了哪个视图,还是v 始终是内容视图?例如。如果我的活动有一个包含一堆视图项目的列表视图,它会告诉我点击了哪个项目吗?
    • @emmby 不,这不会告诉您点击了哪个视图,但您可以在屏幕上获取他们点击的位置,并可以确定哪些视图位于您的手指下方。如果这是要求,您能否在您的问题中澄清这一点?
    • @emmby 我进行了编辑以帮助确定选择了哪些视图
    • 更新很聪明,但打破现有的 onTouchListeners 可能会破坏交易
    • @emmby,听起来你需要创建自定义类来做你想做的事情。除此之外可能还有一些选项,例如代码注入(例如在预编译时向View 类添加一个方法,用于处理所有视图的触摸)。
    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2013-06-29
    相关资源
    最近更新 更多