美文网首页
防止界面被输入法遮挡

防止界面被输入法遮挡

作者: 附庸风雅_ | 来源:发表于2018-01-27 15:19 被阅读0次
        /**
         * rootHeight是window的高
         * rectBottom是window的Y坐标
         * mainInvisibleHeight是window的Y轴被遮挡的高度
         * needScrollHeight是需要滑动的距离(小于0代表下滑,大于0代码上滑)
         * 本方法认为输入法的占屏比会超过1/5
         *
         * @param view   layout(可以是当前布局的任意控件或layout)
         * @param scroll 要求不被遮挡的控件
         */
        private void addLayoutListener(final View view, final View scroll) {
            view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Rect rect = new Rect();
                    //获取window的可视区域大小,并set到rect对象中
                    view.getWindowVisibleDisplayFrame(rect);
                    int rootHeight = view.getRootView().getHeight();
                    int rectBottom = rect.bottom;
                    int mainInvisibleHeight = rootHeight - rectBottom;
                    if (mainInvisibleHeight > rootHeight/5) {
                        int[] location = new int[2];
                        scroll.getLocationInWindow(location);
                        int scrollHeight = scroll.getHeight();
                        int locations = location[1];
                        int needScrollHeight = (locations + scrollHeight) - rectBottom;
                        if (needScrollHeight > 0) {
                            view.scrollTo(0, needScrollHeight);
                        }
                    } else {
                        view.scrollTo(0, 0);
                    }
                }
            });
        }
    

    这是一段防止界面被遮挡的代码,原理是动态移动被遮挡控件位置

    相关文章

      网友评论

          本文标题:防止界面被输入法遮挡

          本文链接:https://www.haomeiwen.com/subject/pgohpxtx.html