EditText失去焦点隐藏软键盘

1, 页面根布局加
android :focusable= "true"
android :focusableInTouchMode= "true"

2.在activity里面重写  dispatchTouchEvent
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent. ACTION_DOWN ) {
View v = getCurrentFocus();
if (ViewUtil. isShouldHideInput ( v, ev )) {
InputMethodManager imm = (InputMethodManager) getSystemService( Context. INPUT_METHOD_SERVICE );
if (imm != null ) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0 );
}
}
return super .dispatchTouchEvent( ev );
}
// 必不可少,否则所有的组件都不会有TouchEvent了
if (getWindow().superDispatchTouchEvent( ev )) {
return true ;
}
return onTouchEvent( ev );
}


/**
* 是否隐藏键盘
* @param v
* @param event
* @return
*/
public static boolean isShouldHideInput(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
int [] leftTop = { 0 , 0 };
//获取输入框当前的location位置
v.getLocationInWindow( leftTop );
int left = leftTop[ 0 ];
int top = leftTop[ 1 ];
int bottom = top + v.getHeight();
int right = left + v.getWidth();
if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 点击的是输入框区域,保留点击EditText的事件
return false ;
} else {
return true ;
}
}
return false ;
}

你可能感兴趣的:(android)