弹窗或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);

主题代码:

<style name="loading_dialog" parent="@android:style/Theme.Dialog">

    <item name="android:windowSoftInputMode">adjustPan

</style>

记录一下!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容