解决android软键盘弹出有时会遮住EditText输入框的一种方法

解决该问题的思路:当软键盘弹出时,让当前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作为一个键盘依赖的一个控件,即需要移动布局时候,始终让布局移动到让键盘处于该控件下方。

具体如图:

解决android软键盘弹出有时会遮住EditText输入框的一种方法_第1张图片

只需调用

main.scrollTo(0,scrollHeight);
向上移动scrollHeight高度即可让输入框不被挡住。

 
  

你可能感兴趣的:(android移动app经验)