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

具体如图:


只需调用

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值