在A(yíng)ctivity中重寫(xiě)下面這個(gè)方法:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
? ? ? ? if (isShouldHideKeyboard(v, ev)) {
? ? ? ? ? hideKeyboard(v.getWindowToken(), this);
? ? ? ? }
}
return super.dispatchTouchEvent(ev);
}
根據(jù)EditText所在坐標(biāo)和用戶(hù)點(diǎn)擊的坐標(biāo)相對(duì)比,來(lái)判斷是否隱藏鍵盤(pán)屎慢,因?yàn)楫?dāng)用戶(hù)點(diǎn)擊EditText時(shí)則不能隱藏
public static boolean isShouldHideKeyboard(View v, MotionEvent event) {
if (v !=null && (vinstanceof EditText)) {
int[] l = {0, 0};
? ? ? ? v.getLocationInWindow(l);
? ? ? ? int left = l[0],
? ? ? ? ? ? ? ? top = l[1],
? ? ? ? ? ? ? ? bottom = top + v.getHeight(),
? ? ? ? ? ? ? ? right = left + v.getWidth();
? ? ? ? if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 點(diǎn)擊EditText的事件誉裆,忽略它。
? ? ? ? ? ? return false;
? ? ? ? }else {
return true;
? ? ? ? }
}
// 如果焦點(diǎn)不是EditText則忽略缚俏,這個(gè)發(fā)生在視圖剛繪制完绵疲,第一個(gè)焦點(diǎn)不在EditText上答毫,和用戶(hù)用軌跡球選擇其他的焦點(diǎn)
? ? return false;
}