首先說下在普通Activity中的實現:java
InputMethodManager manager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub if(event.getAction() == MotionEvent.ACTION_DOWN){ if(getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null){ manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } return super.onTouchEvent(event); }
若是是Fragment的話,須要先讓其中的view實現ide
view.setOnTouchListener(this); ………………………… @Override public boolean onTouch(View v, MotionEvent event) { getActivity().dispatchTouchEvent(event); return false; }
而後其父類Activity中實現dispatchTouchEvent方法(在onTouchEvent不起做用的前提下)this
@Override public boolean dispatchTouchEvent(MotionEvent ev) { System.out.println("dispatchTouchEvent"); if(ev.getAction() == MotionEvent.ACTION_DOWN){ if(getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null){ manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } return super.dispatchTouchEvent(ev); }