每次用户点击或点击屏幕时,是否有一种聪明的“做某事”的方法?我想知道他们点击了哪个视图,并且无需用自定义视图替换所有标准视图。
基本上,我想在我的应用中添加点击跟踪以帮助进行分析。我们已经有了网页跟踪功能(通过为每项活动使用共享超类),但在某些情况下,网页跟踪功能还不够,我们实际上希望跟踪点击次数。
每次用户点击屏幕上的视图时,如何执行功能?
答案 0 :(得分:1)
在你的每个活动中,只需在onCreate
的末尾添加它(如果你的所有活动都是自定义Activity的子类,这一点特别容易,因为那样你只需要写一次):
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.
}
});
修改强>
上述代码无法轻松识别触摸了哪些View
。以下代码将。请注意,如果相关onTouchListener
已注册View
事件,则可能会破坏其他onTouch
。如果没有,这将很有效。它使用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.
}