1突倍、問題
最近公司需要獨立開發(fā)一個IM聊天應(yīng)用蜡峰,UI全定制喧兄,接著就發(fā)生了鍵盤和表情欄切換時的一些不愉快。
表情欄和鍵盤出現(xiàn)的問題
從左往右看圖,在鍵盤已彈出的情況下點擊打開功能欄(左圖),此時鍵盤應(yīng)該是立刻被關(guān)閉而功能欄應(yīng)該被打開,但是卻同時出現(xiàn)了鍵盤和表情欄/功能欄只锻,功能欄被頂起了(中圖)。在功能欄出現(xiàn)大約0.1秒后鍵盤才收起紫谷,變成(右圖)的樣子齐饮。
注:我保證,在打開表情欄/功能欄的同時我已經(jīng)調(diào)用了
hideSoftKeyboard()
來關(guān)閉鍵盤了笤昨。
2祖驱、初步分析
鍵盤的開關(guān)是異步的,給相關(guān)的事件添加延時開關(guān)可以解決這個問題瞒窒。例如handler.postDelay()
然而捺僻,在不同的機型上結(jié)果不一樣,且分有無開啟系統(tǒng)動畫的情況崇裁。所以這個方法不可靠
3匕坯、參考
我百度了下,又github拔稳、掘金了下葛峻,找到了幾篇可行的文章和例子。首先感謝下下方鏈接作者的的例子
https://github.com/leavesC/Keyboard 巴比。直接上源碼
這個作者使用的是
postDelay()
术奖。這個跟我的初步分析是符合的,鍵盤的開關(guān)是異步的且時間不確定的轻绞。
4采记、解決辦法
既然寫死postDelayed
的延遲時間不可靠,那么政勃,我們可以監(jiān)聽鍵盤打開/關(guān)閉以后再進行顯示/隱藏表情欄或功能欄唧龄。
5、總結(jié)
推薦大家先運行下上方鏈接的源碼理解后再進行修改稼病,因為鍵盤和表情/功能欄切換還涉及到布局高度鎖定的操作选侨。