Android獲取軟鍵盤高度

在 Android 里我們是無法直接獲取軟鍵盤高度的,但是在某些場景下,我們又需要獲取軟鍵盤的高度。我們可以使用 ViewTreeObserver.OnGlobalLayoutListener來監(jiān)聽窗口大小的變化,當軟鍵盤彈出時,窗口高度會變小,使用原始窗口高度減去當前窗口高度,就可以得出軟鍵盤的高度了。

//記錄原始窗口高度
private int mWindowHeight = 0;

private ViewTreeObserver.OnGlobalLayoutListener mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        Rect r = new Rect();
        //獲取當前窗口實際的可見區(qū)域
        getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
        int height = r.height();
        if (mWindowHeight == 0) {
            //一般情況下,這是原始的窗口高度
            mWindowHeight = height;
        } else {
            if (mWindowHeight != height) {
                //兩次窗口高度相減,就是軟鍵盤高度
                int softKeyboardHeight = mWindowHeight - height;
                System.out.println("SoftKeyboard height = " + softKeyboardHeight);
            }
        }
    }
};

一般我們在 Activity 的 onCreate()方法中開始監(jiān)聽:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //......
    getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);
}

請注意當 Activity 被銷毀的時候,一定要移除監(jiān)聽,否則就會產(chǎn)生內存泄漏:

@Override
protected void onDestroy() {
    super.onDestroy();
    getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(mGlobalLayoutListener);
}

通過以上方法可以實時監(jiān)聽軟鍵盤的高度變化,特別是像有些輸入法例如搜狗,可以隨時切換拼音輸入、手寫輸入,這個時候軟鍵盤的高度都會發(fā)生變化。

除此之外,還可以通過該方法判斷軟鍵盤是否彈出。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容