设计目标实现
点击一个Button触发显示PopWindow的OnClick响应,在Button上方出现PopWindow。点击其它地方PopWindow消失。
出现问题
点击其它地方没有问题,但是单击Button会使PopWindow先消失,随后触发Button的onclick又产生PopWindow。
解决思路(如果有其它思路欢迎告知)
利用延迟消失,在触发Button响应后再消失PopWindow。300毫秒是在本人手机上较合理的间隔,
间隔太短比如100ms依旧会出现Buttn响应在Touch响应之前,没有达到延迟效果。时间太长则影响用户体验。
关于返回值的问题
该OnTouchListener并不是覆盖源代码中的响应。如果返回值true,源代码中认为你已经处理了touch响应,
它不会再处理。返回值为false时,源代码中会继续执行关于其定义好的touch响应。如果我将返回值设置为
false时,会发生popwindow先消失再出现再消失的现象,这是因为先触发了源代码中的dismiss()方法,
然后又触发自己的Button的onClick响应,最后才轮到延时的dismiss()方法。
popMenu.setTouchInterceptor(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { mHandler.postDelayed(new Runnable() { @Override public void run() { dismissPopMenu(); }},300); if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { return true; } return false; }
总结:源代码是程序员无尽的宝藏 one piece!