随软键盘弹出和收回view(二)

本文介绍了一种改进的软键盘适配方案,通过监听软键盘弹出与收回时的布局变化,动态调整输入框的位置,使其始终位于软键盘上方,提供更好的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇提出了一种软键盘弹出时输入框显示在键盘上的方式,就是设置活动关于软键盘的属性为adjustPan,让软键盘把输入框顶上去。但是这种体验并不是很好,因为输入框上面的内容也都一起被顶了上去。

所以有另一种思路,就是软键盘弹出时输入框布局移动到软键盘上方,这里的移动是通过设置marginBottom实现的。

首先要做到的就是监听软键盘的弹出与回收,这个是通过给活动添加布局改变的监听实现的(在上一篇提到过):

final View view=getWindow().getDecorView();
        view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Rect rect=new Rect();
                view.getWindowVisibleDisplayFrame(rect);
                int displayHeight=rect.bottom-rect.top;
                int maxHeight=view.getHeight();
                int height=maxHeight-displayHeight;
                if (height<200){
                    min=height;
                }
                if (height!=lastHeight){
                    LinearLayout.LayoutParams params= (LinearLayout.LayoutParams) llEdit.getLayoutParams();
                    params.setMargins(0,0,0,height-min);
                    llEdit.setLayoutParams(params);
                    lastHeight=height;
                }
            }
        });
变量height表示界面被挤压掉的高度,软键盘弹出时可以近似认为是软键盘的高度。但是经过测试就算没有软键盘这个差值height也不是0(这里用min表示),所以设置min来辅助测算marginBottom。

每当软键盘弹出和收回的时候,这个监听方法得到调用,然后用height-min作为输入框布局的marginBottom,就可以做到布局出现在软键盘正上方,并在软键盘收回后沉底。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值