小知识总结——————Android点击空白处隐藏软键盘

可以直接复制
亲测有效

@Override  
public boolean dispatchTouchEvent(MotionEvent event) {  
    if (event.getAction() == MotionEvent.ACTION_DOWN  &&  
            getCurrentFocus()!=null &&  
            getCurrentFocus().getWindowToken()!=null) {  
  
        View v = getCurrentFocus();  
        if (isShouldHideKeyboard(v, event)) {  
            hideKeyboard(v.getWindowToken());  
        }  
    }  
    return super.dispatchTouchEvent(event);  
}  
  
/** 
 * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏 
 */  
private boolean isShouldHideKeyboard(View v, MotionEvent event) {  
    if (v != null && (v instanceof EditText)) {  
        int[] l = {0, 0};  
        v.getLocationOnScreen(l);  
        int left = l[0],  
                top = l[1],  
                bottom = top + v.getHeight(),  
                right = left + v.getWidth();  
        if (event.getRawX() > left && event.getRawX() < right  
                && event.getRawY() > top && event.getRawY() < bottom) {  
            // 点击EditText的事件,忽略它。  
            return false;  
        } else {  
            return true;  
        }  
    }  
    // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点  
    return false;  
}  
  
/** 
 * 获取InputMethodManager,隐藏软键盘 
 */  
private void hideKeyboard(IBinder token) {  
    if (token != null) {  
        InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);  
        inputMethodManager.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);  
    }  
}  

你可能感兴趣的:(小知识)