Android之點擊空白處關(guān)閉軟鍵盤

Android中點擊非EditText區(qū)域關(guān)閉軟鍵盤:

1. 重寫Activity中dispatchTouchEvent方法,計算觸摸點位置
    override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
        if (ev?.action == MotionEvent.ACTION_DOWN) {
            val v = currentFocus
            if (v is EditText) {
                val l = intArrayOf(0, 0)
                v.getLocationInWindow(l)
                onTouchEditText(ev.x > l[0]
                        && ev.x < l[0] + v.getWidth()
                        && ev.y > l[1]
                        && ev.y < l[1] + v.getHeight())
            }
        }
        return super.dispatchTouchEvent(ev)
    }

    private fun onTouchEditText(isTouchInEditText: Boolean) {
        //TODO 觸摸點不在EditText內(nèi),關(guān)閉軟鍵盤
        Toast.makeText(this,
                if (isTouchInEditText) "點擊在輸入框內(nèi)" else "點擊在輸入框外",
                Toast.LENGTH_SHORT).show()
    }

比較推薦使用

2. 為布局根節(jié)點設(shè)置點擊事件
        skill_touch_rootView.setOnClickListener { v ->
            val imm = getSystemService(Context.INPUT_METHOD_SERVICE)
                    as InputMethodManager
            imm.hideSoftInputFromWindow(v.windowToken, 0)
        }

缺點:如果布局中其他控件設(shè)置了OnClickListener,則點擊該控件區(qū)域并不會關(guān)閉軟鍵盤。

如下圖(灰色為根布局,綠色為按鈕,白色為輸入框),則只有點擊灰色區(qū)域才能關(guān)閉軟鍵盤。

最后,附上個人測試所用的 SkillEditTouchActivity源碼~

最后編輯于
?著作權(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ù)。

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