騰訊互動直播1.8解決軟鍵盤覆蓋輸入框和監聽軟鍵盤彈出關閉

騰訊雲互動直播1.8的demo 上面,在直播界面軟鍵盤會覆蓋輸入框,起初的想法是 動態設置輸入框 dialog 的位置,但是在demo 上修改之後,在小米,魅族,華爲等機器上是可以解決覆蓋的問題,但是在三星的機器上還是存在覆蓋的問題。有人可能遇到解決覆蓋問題了,但是監聽軟鍵盤失效了。就是關閉軟鍵盤dialog 沒有關閉。下面就是我的解決方案,先上圖:

這裏寫圖片描述


問題1:軟鍵盤覆蓋dialog

這裏寫圖片描述

在 setContentView 之前添加
//防止軟鍵盤遮擋住Dialog的輸入框
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

即可解決軟鍵盤覆蓋的問題;

問題2:當輸入框彈出後點擊空白處關閉軟鍵盤和dialog

1.將dialog 的根佈局改爲 match_parent

2.除去 舊代碼中的 對根佈局的位置的監聽,增加 根佈局 onTouch的監聽事件

這裏寫圖片描述

問題3:關閉輸入框或者按返回鍵 dialog 未關閉

按照1,2 步驟完成之後,發現 關閉輸入框或者按返回鍵 dialog 未關閉,會出現在 屏幕的底部,此時就需要監聽 根佈局 GlobalLayout的事件

在activity_live.xml 佈局中發現最上層的佈局是

    <include
        android:id="@+id/invite_views"
        layout="@layout/invite_views"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent" />

此時 對該佈局 做監聽事件就可以了 ;

注意 :OnGlobalLayoutListener 響應 的條件是 :
SoftInputMode 是 ADJUST_RESIZE,不然是無法監聽到位置的改變的。

//軟鍵盤的監聽
        findViewById(R.id.invite_views).getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Rect r = new Rect();
                //獲取當前界面可視部分
                getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
                //獲取屏幕的高度
                int screenHeight =  getWindow().getDecorView().getRootView().getHeight();
                //此處就是用來獲取鍵盤的高度的, 在鍵盤沒有彈出的時候 此高度爲0 鍵盤彈出的時候爲一個正數
                int heightDifference = screenHeight - r.bottom;

                if(heightDifference <= 0 && mLastDiff > 0){
                    //軟鍵盤收起狀態
                    Log.d("AAAA","軟鍵盤 彈出之後收起了 Rect GlobalLayoutListener heightDifference="+heightDifference+",mLastDiff="+mLastDiff);
                    if(inputMsgDialog!=null && inputMsgDialog.isShowing()){
                        inputMsgDialog.dismiss();
                    }
                }
                mLastDiff = heightDifference;

            }
        });

這裏寫圖片描述

至此,上述問題應該解決了。

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