android dialog中软键盘压盖输入框

最近做项目遇到在自定义dialog中有edittext,当输入时出现软键盘压盖输入框导致看不到输入内容。

于是查找资料解决问题:
(1)在dialog依赖的activity中设置style   android:windowSoftInputMode="adjustPan"

(2)自定义dialog设置style  android:windowSoftInputMode="adjustPan"

由于我的是特制机通过以上方法还是没有解决,针对以品牌机虽然布局被顶上去了,但还是会稍微压盖输入框

经过几番思索,想出一个解决思路:
(1)整个布局是个ScrollView ,给ScrollView中的根布局添加一个控件设置gone,使其居于布局最底下,高低自定义
 (2)监听输入框视图变化变化,当变化时获取屏幕可见高,和屏幕原始高做对比,当等于0 说明软键盘没弹出,当大于0说明压键盘弹出

 (3)在弹出软键盘时,让最底下控件显示,这是可以手动滑动布局让弹窗不压盖输入框,当软键盘消失,隐藏最底下控件

多说无益还是直接上代码:

  view---最底下控件

  dialog---当前dialog

 et_text---需要监听的输入框

//监听控件输入时软键盘弹出消失,设置底部控件margin
     et_Text.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener
            @Override
            public void onGlobalLayout() {
                Rect r = new Rect();
                //获取界面可视部分
                dialog.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
                //获取屏幕的高度
                int screenHeight =  dialog.getWindow().getDecorView().getRootView().getHeight();
                //比较可视高度和屏幕高度
                int heightDifference = screenHeight - r.bottom;
                if(heightDifference>0){//软键盘弹出
                   view.setVisibility(View.VISIBLE);
                }else{
                    view.setVisibility(View.GONE);////软键盘消失
                }
            }
            
        });



 

你可能感兴趣的:(android)