最近做项目遇到在自定义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);软键盘消失
}
}
});