弹窗或Dialog下,弹出打开输入法时,页面被遮挡

弹窗或Dialog下,弹出打开输入法时,页面被遮挡。需求是输入法弹出时页面需要上移,且输入框不被挡住,试了改变布局的高度,结果并不理想

/**

* @param root            最外层布局

* @param needToScrollView 要滚动的布局,就是说在键盘弹出的时候,你需要试图滚动上去的View,在键盘隐藏的时候,他又会滚动到原来的位置的布局

*/

private void controlKeyboardLayout(Context context,final View root, final View needToScrollView) {

root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

private Rectr =new Rect();

        @Override

        public void onGlobalLayout() {

Rect rect =new Rect();

            //获取root在窗体的可视区域

            root.getWindowVisibleDisplayFrame(rect);

            //获取root在窗体的不可视区域高度(被其他View遮挡的区域高度)

            int rootInvisibleHeight =root.getHeight() - rect.bottom;

            //若不可视区域高度大于100,则键盘显示

            LogUtil.e("不可视区域:" + rootInvisibleHeight);

            if (rootInvisibleHeight > -1100) {

if (syDialog !=null){

syDialog.setStyle(1, R.style.loading_dialog);

                }

int[] location =new int[2];

                //获取scrollToView在窗体的坐标

                needToScrollView.getLocationInWindow(location);

                //计算root滚动高度,使scrollToView在可见区域

                int scrollHeight1 = (location[1] +needToScrollView.getHeight()) - rect.bottom;

                int scrollHeight = (int) ScreenUtils.px2dp(context,550);

                LogUtil.e("scroll区域:" + scrollHeight1);

                if (scrollHeight ==0){

return;

                }

root.scrollTo(0, scrollHeight);

            }else {

//键盘隐藏

                root.scrollTo(0, 0);

            }

}

});

}

还试了manifest加android:windowSoftInputMode="adjustPan",也没实现dialog上移的效果;

最后一行代码就搞定了,就是改变Dialog的主题,syDialog.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.loading_dialog);

主题代码:

记录一下!

你可能感兴趣的:(弹窗或Dialog下,弹出打开输入法时,页面被遮挡)