android仿微信、QQ等聊天介面,實現點選輸入框彈出軟鍵盤、點選其他區域收起軟鍵盤,預設滑動至最低端
阿新 • • 發佈:2018-11-07
如圖所示,點選輸入框及選擇圖片和傳送按鈕時軟鍵盤顯示且不消失,點選其他區域,則隱藏軟鍵盤。
主要程式碼如下:
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"