当我们做界面的时候希望实现失去焦点进行某些操作,但是,当点击其他内容的时候焦点不一定失去,这就需要我们手动去实现点击当前控件外部内容隐藏当前控件的目的。
我的实现方式就是:
重写Activity的Touch分发方法,在分发之前就拦截Touch事件然后进行处理,希望得到大家的批评指正。
@Override public boolean dispatchTouchEvent(MotionEvent event) { if(mHeadSearchLayout.getVisibility()==View.VISIBLE) { final int x = (int) event.getX(); final int y = (int) event.getY(); if ((event.getAction() == MotionEvent.ACTION_DOWN) && ( (x < 0) || (x >=(mHeadSearchLayout.getLeft()+mHeadSearchLayout.getWidth())) || (y < 0) || (y >= (mHeadSearchLayout.getTop()+mHeadSearchLayout.getHeight())) ) ) { setSearchHeadSearchVisible(false); return super.dispatchTouchEvent(event); } else if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { setSearchHeadSearchVisible(false); return super.dispatchTouchEvent(event); } else { return super.dispatchTouchEvent(event); } } else { return super.dispatchTouchEvent(event); } }