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

来源:互联网 发布:读书无用论 知乎 编辑:程序博客网 时间:2024/06/15 23:19

上一篇提出了一种软键盘弹出时输入框显示在键盘上的方式,就是设置活动关于软键盘的属性为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,就可以做到布局出现在软键盘正上方,并在软键盘收回后沉底。

原创粉丝点击