android點擊輸入框以外的區(qū)域,隱藏軟鍵盤

1.首先設(shè)置攔截器,監(jiān)聽點擊事件

public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (isShouldHideKeyboard(v, ev)) {
hideKeyboard(v.getWindowToken());
}
}

    return super.dispatchTouchEvent(ev);
}

2.根據(jù)EditText所在坐標(biāo)和用戶點擊的坐標(biāo)相對比,來判斷是否隱藏鍵盤,因為當(dāng)用戶點擊EditText時沒必要隱藏

private boolean isShouldHideKeyboard(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
int[] l = {0, 0};

        v.getLocationInWindow(l);

        int left = l[0];
        int top = l[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;
        }
    }

    // 如果焦點不是EditText則忽略,這個發(fā)生在視圖剛繪制完,第一個焦點不在EditText上,和用戶用軌跡球選擇其他的焦點
    return false;
}

3.隱藏輸入法

private void hideKeyboard(IBinder token) {
    if (token != null) {
        InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容