Android 監聽鍵盤狀態變化,並獲取鍵盤高度

weixin_33912445發表於2018-05-05

因為是監控鍵盤狀態的改變就不上效果圖了

按照規矩先吧傳送門搞好GitHub - GitHubToLiao/KeyboardListenerDemo


    在我們平常開發過程中很多地方都需要監控鍵盤的變化以及獲取鍵盤的高度,谷歌提供的API中並沒有提供有關鍵盤狀態變化以及獲取鍵盤高度的相關監聽,但是我們可以通過別的方式得到我們想要的東西,API是死的人是活的。

這裡我就來說說我實現的思路

    我們都知道在Android我們是可以拿到螢幕中可視高度的,如果我們拿到螢幕的高度然後減去可視區域的高度不就是鍵盤的高度了。 拿到鍵盤的高度,下來就是要監控什麼時候鍵盤彈起來,什麼時候關閉。這樣我們就可一將獲取鍵盤狀態變化分解成下面三步了。

一、佈局變化監聽

OnGlobalLayoutListener 是ViewTreeObserver的內部類,當一個檢視樹的佈局發生改變時,可以被ViewTreeObserver監聽到,在檢視樹的全域性事件改變時得到通知。ViewTreeObserver不能直接例項化,而是通過getViewTreeObserver()獲得。

這裡需要注意的是當我們不在使用監聽的時候需要呼叫removeOnGlobalLayoutListener對監聽進行移除,不然容易發生記憶體洩露

二、獲取可視區域大小,兩行程式碼沒什麼可說的

Rect rect = new Rect();

contentView.getWindowVisibleDisplayFrame(rect);//獲取佈局的可視區域

三、計算鍵盤高度

int keyboardHeight = contentView.getHeight() - (rect.bottom - rect.top);

解釋下我們通過螢幕的高度減去可視區域的高度得到的就是鍵盤的高度,當得到的高度為0時代表鍵盤關閉,當高度大於0代表鍵盤開啟

四、傳送門

GitHub - GitHubToLiao/KeyboardListenerDemo

相關文章