解决该问题的思路:当软键盘弹出时,让当前Activity的最外层布局向上移动一定的距离,让输入框处于可视范围内。
方法:
private void addLayoutListener(final View main, final View scroll) {
main.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect rect=new Rect();
main.getWindowVisibleDisplayFrame(rect);//rect为输出参数,因此rect不允许为null
int mainInvisibleHeight=main.getRootView().getHeight()-rect.bottom;
System.out.println(scroll.getBottom());
if (mainInvisibleHeight>100){
int[] location=new int[2];
scroll.getLocationOnScreen(location);//输入参数必须是一个长度为2的int数组
int scrollHeight=(location[1]+scroll.getHeight()-rect.bottom);
main.scrollTo(0,scrollHeight);
}else{
main.scrollTo(0,0);
}
}
});
}
main为当前Activity的最外层Layout;
Rect rect=new Rect();
main.getWindowVisibleDisplayFrame(rect);
rect是作为getWindowVisibleDisplayFrame();的输出参数,因此rect不允许为null;rect为可见的范围。
mainInvisibleHeight为键盘弹出时候的不可见范围;
如果mainInvisibleHeight超过指定值则会遮住输入框(具体值根据具体布局而定);
scroll作为一个键盘依赖的一个控件,即需要移动布局时候,始终让布局移动到让键盘处于该控件下方。
具体如图:
只需调用
main.scrollTo(0,scrollHeight);
向上移动scrollHeight高度即可让输入框不被挡住。