android仿微信、QQ等聊天界面,实现点击输入框弹出软键盘、点击其他区域收起软键盘,默认滑动至最低端

如图所示,点击输入框及选择图片和发送按钮时软键盘显示且不消失,点击其他区域,则隐藏软键盘。

主要代码如下:

override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
    if (ev!!.getAction() === MotionEvent.ACTION_DOWN) {
        val v = currentFocus
        if (isShouldHideInput(v, ev!!)) {//点击的是其他区域,则调用系统方法隐藏软键盘
            val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            if (imm != null) {
                imm!!.hideSoftInputFromWindow(v!!.windowToken, 0)
            }
        }
        return super.dispatchTouchEvent(ev)
    }
    // 必不可少,否则所有的组件都不会有TouchEvent了
    return if (window.superDispatchTouchEvent(ev)) {
        true
    } else onTouchEvent(ev)
}

/**
 * 判断是否是输入框区域
 */
fun isShouldHideInput(v: View?, event: MotionEvent): Boolean {
    if (v != null) {
        when (v.id) {
            R.id.etEditContent -> {
                val leftTop = intArrayOf(0, 0)
                //获取输入框当前的location位置
                v!!.getLocationInWindow(leftTop)
                val left = leftTop[0]
                val top = leftTop[1]
                val bottom = top + v!!.getHeight()
                val right = DisplayUtil.getScreenWidth(this)
                return if (event.x > left && event.x < right
                        && event.y > top && event.y < bottom) {
                    // 点击的是输入框区域,保留点击EditText的事件
                    false
                } else {
                    true
                }
            }
            else -> {
                return false
            }
        }
    }
    return false
}
 

 在第一次进入该页面、弹出软键盘、收到消息的时候,将RecycleView滑至最后一条: 

rvSingleChat.scrollToPosition(adapter!!.itemCount - 1)

 记得在当前Activity的配置文件里面需要设置为:

android:windowSoftInputMode="adjustResize"
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值