聊天室界面
recyclerView
的串接過程!聊天室的聊天泡泡
在處理畫面的聊天泡泡,其實還蠻麻煩的,主要要針對他的 background 去畫,並且要畫出 user 這邊的(泡泡尾巴向右)以及 bot 端的(泡泡尾巴向左)。
整體的概念是這樣,泡泡尾巴可以先想成是一個三角形的某個部份,而這個三角形可以由正方形旋轉產生出來,接著再疊上一層圓角長方形。
drawable
裡面新建一個 xml 檔案
泡泡尾巴是一個正方形用轉的,轉了一點點角度之後只留上方的頭,如下
code
<rotate
android:fromDegrees="30"
android:pivotX="50%"
android:pivotY="0%"
>
<shape android:shape="rectangle" >
<solid android:color="#000055" />
</shape>
</rotate>
<item android:right="14dp">
<shape android:shape="rectangle" >
<solid android:color="#000055" />
<corners android:radius="4dp" />
</shape>
</item>
fromDegrees
跟 toDegrees
點擊其他地方,收起 editText 的小鍵盤
如果現在在打字,那麼下方會顯現出一個虛擬鍵盤,收起這個鍵盤都要按下返回鍵才會返回。為了增加使用者體驗,我希望達到點擊其他的空白處,他就會自動收起來了,該如何做呢?
我在 fragment
的 layout 加入了 touchListener
,當按下背景的時候就會觸發,而這邊的觸發處理比較簡單,如下
viewRoom.chatRoom.setOnTouchListener { view, motionEvent ->
when(motionEvent.action) {
MotionEvent.ACTION_DOWN-> {
viewRoom.texting.clearFocus()
val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view!!.windowToken, 0)
return@setOnTouchListener false
}
}
}
首先,我先清掉在 editText
上面的 focus,這邊有直接指定要清掉 texting
的這個 EditText
,另外也可以使用 activity.getcurrentFocus()
來取(如果可能會不知道哪幾個會被 focus 的話建議使用這個),清除了之後,下面就是把 softInput
(就是螢幕跳出來的小鍵盤)給隱藏起來,就搞定了。