1.点击空白区域输入法没有消失
2.输入框失去焦点时,光标还在闪烁
解决方法:
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {if (ev.action === MotionEvent.ACTION_DOWN) {// 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)val v = currentFocus// mBinding.blessTypeEdit.blessMessage.isCursorVisible = v== mBinding.blessTypeEdit.blessMessageif (isShouldHideInput(v, ev)) {hideSoftInput(v!!.windowToken)}}return super.dispatchTouchEvent(ev) }/*** 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏** @param v* @param event* @return*/ private fun isShouldHideInput(v: View?, event: MotionEvent): Boolean {if (v != null && v is EditText) {val leftTop = intArrayOf(0, 0)//获取输入框当前的location位置v.getLocationInWindow(leftTop)val left = leftTop[0]val top = leftTop[1]val bottom = top + v.getHeight()val right = left + v.getWidth()return if (event.x > left && event.x < right && event.y > top && event.y < bottom) {// 点击的是输入框区域,保留点击EditText的事件false} else {//使EditText触发一次失去焦点事件v.setFocusable(false)// v.setFocusable(true); //这里不需要是因为下面一句代码会同时实现这个功能v.setFocusableInTouchMode(true)true}}return false }/*** 多种隐藏软件盘方法的其中一种** @param token*/ private fun hideSoftInput(token: IBinder?) {if (token != null) {var im: InputMethodManager? = nullif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {im = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {im!!.hideSoftInputFromWindow(token,InputMethodManager.HIDE_NOT_ALWAYS)}} }