?最近公司項(xiàng)目需要寫一個(gè)懸浮球,其中有個(gè)功能是鍵盤避讓想了很久(踩了很多坑)- -趋距!,記錄下來越走,供大家參考棚品。
首先網(wǎng)上的一些實(shí)現(xiàn)并不管用。
比如監(jiān)聽布局高度的變化廊敌,只能在應(yīng)用內(nèi)實(shí)現(xiàn),全局并不能監(jiān)聽的到门怪。
還有的是使用Notifacation監(jiān)聽輸入法變化來實(shí)現(xiàn)骡澈,這個(gè)方法要求有點(diǎn)苛刻,要求手機(jī)必須安裝倆個(gè)以上的輸入法掷空。(而且在原生系統(tǒng)貌似也沒啥用)
Android也沒有提供特定的API監(jiān)聽軟鍵盤彈出關(guān)閉肋殴。
由于是公司自己做Rom,所以可以從源碼層級(jí)考慮囤锉,修改Framework相關(guān)代碼來實(shí)現(xiàn),擼了一遍輸入法相關(guān)的源碼护锤。發(fā)現(xiàn)InputmethodManagerService中有兩個(gè)方法showSoftInput 和hideSoftInput 于是打開Log試了一下官地,發(fā)現(xiàn)可以在這兩個(gè)方法中監(jiān)聽鍵盤打開和關(guān)閉。發(fā)兩個(gè)廣播就可以了烙懦。
接收到廣播驱入,在項(xiàng)目中接收廣播,修改懸浮球位置即可氯析。