需求
在实际项目开发中,有这样的需求,长按整个ViewGroup响应长按事件,例如长按弹出对话框或者popwindow等等
问题
针对这个需求出现两种情况:
1,当ViewGroup中无任何子view的时候,长按事件按压ViewGroup任何位置都可以响应.
2,当ViewGroup中有子view的时候,例如包含TextView,长按子view的时候,就无法响应ViewGroup的长按事件,长按子view以外的区域可以影响其长按事件.
显然这样是不符合我们的需求,那么如何解决此问题呢?
解决方案
1,给子view也添加长按事件,调用父view的长按逻辑
特点:这种方式可以实现,但是子view较多的情况下,需要添加较多长按事件,会增加代码复杂度
2,给子view设置触摸监听,在回调方法抬起的时候,响应view的长按事件
特点:需要处理多个子view的触摸监听.
代码示意:
tvContent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
getViewGroup().performLongClick();
}
return false;
}
});
3,父view拦截长按事件,不让他传递给子view.
4,更好的方案有待思考和研究,欢迎提供宝贵意见!!!