Android獲取虛擬鍵盤的高度 和判斷鍵盤彈起和收回的狀態,

由於有的時候去設置AndroidManifest.xml去設置android

android:windowSoftInputMode="stateVisible|adjustResize|stateAlwaysHidden"

不必定可以達到想要的效果,好比輸入框在界面的最下面好比微信和QQ聊天界面,聊天框在界面下面,在設置adjustResize的時候是能夠移動界面留出鍵盤位置,可是若是在聊天界面裏面在加上一個背景圖片或者是視頻,這個時候adjustResize就明顯不夠用了。就須要咱們去判斷鍵盤彈起和收回狀態去動態計算界面高度,已達到咱們想要的效果。 其實若是Android可以提供這樣的api的話就很好解決,現在他並沒提供此方法,那也就咱們本身解決。 解決辦法就是一樣須要在AndroidManifest設置adjustResize的屬性,須要這個去改變界面佈局大小方便計算佈局的改變,這裏rootView必定是根目錄佈局文件。api

rootView.getViewTreeObserver().addOnGlobalLayoutListener(globalLayoutListener);
int mVisibleHeight;
    //鍵盤狀態監聽
    private ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            final Rect rect = new Rect();
            rootView.getWindowVisibleDisplayFrame(rect);
            int screenHeight = rootView.getRootView().getHeight();
            keyHeight = screenHeight / 3;
            int visibleHeight = rect.height();
            //閥值設置爲屏幕高度的1/3
            int heightDifference = screenHeight - (rect.bottom - rect.top);
            if (mVisibleHeight == 0) {
                mVisibleHeight = visibleHeight;
                return;
            }
            if (mVisibleHeight == visibleHeight) {
                return;
            }
            mVisibleHeight = visibleHeight;
            boolean visible = heightDifference > screenHeight / 3;
            if (visible) {
                //鍵盤彈出
            }else{
                //鍵盤收起
            }
        }
    };
相關文章
相關標籤/搜索