在dialog中監聽軟鍵盤彈起,設置dialog佈局的位置

1、首先獲取佈局的根視圖View

View rootView = LayoutInflater.from(mContext).inflate(R.layout.layout_dialog_wlan_input_password, null);

2、獲取dailog中需要移動位置的佈局;

LinearLayout mLlWifiWlanInputPswContainer = rootView.findViewById(R.id.rl_wifi_wlan_input_psw_container);

3、在dialog的show方法中添加監聽

// 監聽軟鍵盤彈起/隱藏
            rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    //獲取當前根視圖在屏幕上顯示的大小
                    Rect r = new Rect();
                    rootView.getWindowVisibleDisplayFrame(r);
                    int visibleHeight = r.height();
                    // 初始化時,根視圖按設置大小顯示
                    if (rootViewLastVisibleHeight == 0) {
                        rootViewLastVisibleHeight = visibleHeight;
                        return;
                    }
                    //根視圖顯示高度沒有變化,可以看作是軟鍵盤顯示/隱藏狀態沒有改變
                    if (rootViewLastVisibleHeight == visibleHeight) {
                        return;
                    }

                    //上次顯示比目前顯示的高度大,可以看作軟鍵盤顯示了,200 爲鍵盤的高度
                    if (rootViewLastVisibleHeight - visibleHeight > 200) {
                        mLlWifiWlanInputPswContainer.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
                        mLlWifiWlanInputPswContainer.setPadding(0, 80, 0, 0);
                        rootViewLastVisibleHeight = visibleHeight;
                        return;
                    }

                    //上次顯示沒有當前顯示的高度大,可以看做軟鍵盤隱藏了,200 爲鍵盤的高度
                    if (visibleHeight - rootViewLastVisibleHeight > 200) {
                        mLlWifiWlanInputPswContainer.setGravity(Gravity.CENTER);
                        mLlWifiWlanInputPswContainer.setPadding(0, 0, 0, 0);
                        rootViewLastVisibleHeight = visibleHeight;
                        return;
                    }
                }
            });

到此就完事了。。。。,基本核心就是監聽根視圖的顯示大小與上次顯示的大小作對比,利用根視圖的繪製完成的監聽實現。

顯示鍵盤

  mEtWifiWlanPassword.setFocusableInTouchMode(true);
                    mEtWifiWlanPassword.setClickable(true);
                    mEtWifiWlanPassword.setVisibility(View.VISIBLE);
                    mEtWifiWlanPassword.requestFocus();
                    InputMethodManager manager = ((InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE));
                    if (manager != null) {
                        manager.showSoftInput(mEtWifiWlanPassword, 0);
                    }

隱藏鍵盤

  InputMethodManager localInputMethodManager = (InputMethodManager) SystemServiceFactory.getSystemService(getContext(), INPUT_METHOD_SERVICE);
        if (localInputMethodManager != null && mEtWifiWlanPassword != null) {
            localInputMethodManager.hideSoftInputFromWindow(mEtWifiWlanPassword.getWindowToken(), 0);
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章