实现功能:当触碰搜索框外面时,收起输入法的虚拟键盘。
先监听activity里的 dispatchTouchEvent()方法,再用一个方法来判断触碰点是否是在搜索框外,若是搜索框外,则收起虚拟键盘
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
View v = getCurrentFocus();
if (isShouldHideInput(v, ev)) {// true表示用户点击了非输入框之外的地方
}
}
return super.dispatchTouchEvent(ev);
}
private boolean isShouldHideInput(View v, MotionEvent event) {
if (v != null && (v == mCommentEdittext)) {
int[] l = {0, 0};
bottomLayout.getLocationInWindow(l);
int left = l[0], top = l[1], bottom = top + bottomLayout.getHeight(), right = left
+ bottomLayout.getWidth();
if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 点击EditText的事件,忽略它。
return false;
} else {
return true;
}
}
// 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
return false;
}