项目要注册会员,需要的输入框较多,但是后边几个就会被输入框遮挡,网上找了好多方法都不行,最后找到了篇相关博客,试了下 完美解决我的需求。传送门
这是修改之前的截图
这是修改之后的样子
写输入框的焦点监听,获取焦点的时候显示当前输入框到输入法上边。
这样式是我自己改过的,我让他显示下一个输入框,就不用滑动页面就可以点击下一个输入框输入。
下面是代码
et_invitation_code.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { controlKeyboardLayout(ll_scroll, et_invitation_code); } });
/** * @param root 最外层布局,需要调整的布局 * @param scrollToView 被键盘遮挡的scrollToView,滚动root,使scrollToView在root可视区域的底部 */ private void controlKeyboardLayout(final View root, final View scrollToView) { root.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect rect = new Rect(); // 获取root在窗体的可视区域 root.getWindowVisibleDisplayFrame(rect); // 获取root在窗体的不可视区域高度(被其他View遮挡的区域高度) int rootInvisibleHeight = root.getRootView().getHeight() - rect.bottom; // 若不可视区域高度大于100,则键盘显示 if (rootInvisibleHeight > 100) { int[] location = new int[2]; // 获取scrollToView在窗体的坐标 scrollToView.getLocationInWindow(location); // 计算root滚动高度,使scrollToView在可见区域 int srollHeight = (location[1] + scrollToView.getHeight() + dp2px(10)) - rect.bottom; root.scrollTo(0, srollHeight); } else { // 键盘隐藏 root.scrollTo(0, 0); } } }); } private int dp2px(int dpValue) { final float scale = getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); }主要就是 controlKeyboardLayout 方法了。