### Android 点击全键盘以外的区域隐藏软键盘
处理这个其实很简单的
1、给整个activity设置一个点击事件(或者onTouch事件)
2、然后处理点击事件,加上两句代码:
InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
// edit.setCursorVisible(false);//失去光标
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
还有一种,在基类 BaseActivity 中,重写 dispatchTouchEvent 方法:
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
// Finger touch screen event
if (ev!!.action == ACTION_DOWN) {
val view = currentFocus
if (isShouldHideSoftKeyBoard(view, ev)) {
hideSoftKeyBoard(view!!.windowToken, this@BaseActivity)
}
}
return super.dispatchTouchEvent(ev)
}
使用到的工具方法如下:
fun isShouldHideSoftKeyBoard(view: View?, event: MotionEvent): Boolean {
if (view != null && view is EditText) {
val l = intArrayOf(0, 0)
view.getLocationInWindow(l)
val left = l[0]
val top = l[1]
val bottom = top + view.getHeight()
val right = left + view.getWidth()
return !(event.x > left && event.x < right && event.y > top && event.y < bottom)
}
return false
}
fun hideSoftKeyBoard(token: IBinder?, context: Context) {
if (token != null) {
val im =
context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
im.hideSoftInputFromWindow(
token,
InputMethodManager.HIDE_NOT_ALWAYS
)
}
}
参考原文:https://blog.csdn.net/u013252110/article/details/84317245
### Android 解决键盘把布局顶上去的冲突的问题
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN
| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
参考原文https://blog.csdn.net/shenggaofei/article/details/78262783