Android 登录界面软键盘弹出以后界面上移

这篇博客主要是介绍在登陆界面,由于软键盘的弹出导致登录按钮不可见对于,造成不好额用户体验进行修改。

主要是实现,在输入账号和密码的使用使界面上移,到达登录按钮显示的效果。

本篇博客主要是通过LayoutParams实现 (弊端 效果是瞬间完成,可以通过Scroller或者动画实现平滑一定效果)


布局界面很简单就不给代码,文章最后会给上源码下载地址


核心代码

private void adjustLayout() {
        root.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        int height = root.getRootView().getHeight() - root.getHeight();

                        if (height > 100) { // 如果高度超过100像素 可能是软键盘 这个地方判断需要注意 是在没有ActionBa的前提
                            // 进行界面移动处理

                            // 如果软键盘已经显示 直接返回
                            if (showSoftInputFlag) {
                                return;
                            }

                            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)
                                    inputBox.getLayoutParams();
                            // 计算软键盘弹出后 输入区域的上边距
                            params.topMargin = rootHeight - height - inputBox.getHeight();
                            inputBox.setLayoutParams(params);

                            // 设置注册按钮在软键盘弹出后不显示在可见界面上
                            params = (RelativeLayout.LayoutParams) register.getLayoutParams();
                            params.bottomMargin = -register.getHeight();
                            register.setLayoutParams(params);

                            // 修改是否显示软键盘的标记
                            showSoftInputFlag = true;

                        } else {

                            if (!saveOldDataFlag) { // 实现初始化原始值 方便后面软键盘隐藏以后界面恢复
                                rootHeight = root.getHeight();

                                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)
                                        inputBox.getLayoutParams();
                                inputBoxTopMargin = params.topMargin;

                                params = (RelativeLayout.LayoutParams) register.getLayoutParams();
                                registerBottomMargin = params.bottomMargin;

                                saveOldDataFlag = true;
                            }

                            // 软键盘没有显示直接返回
                            if (!showSoftInputFlag) {
                                return;
                            }

                            // 回复界面在不显示软件盘时候的布局
                            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)
                                    inputBox.getLayoutParams();
                            params.topMargin = inputBoxTopMargin;
                            inputBox.setLayoutParams(params);

                            params = (RelativeLayout.LayoutParams) register.getLayoutParams();
                            params.bottomMargin = registerBottomMargin;
                            register.setLayoutParams(params);

                            // 修改软件盘显示的标记
                            showSoftInputFlag = false;
                        }
                    }
                });
    }


还有一个需要注意的地方

在 清单文件文件中 配置该activity

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
去掉actionbar有好多方法,这个看自己的实现吧


源码下载地址: 穿越吧,若曦

你可能感兴趣的:(android,登录,软键盘)