弹窗或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);
主题代码:
记录一下!