防止界面被输入法遮挡

    /**
     * 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);
                }
            }
        });
    }

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,233评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,196评论 4 61
  • 桂花落了一地 践踏着这满世界的芬芳 百草枯碎成飘零的秋 阴森森的天际 呼啦啦的冷风 行人裹着这厚厚的化纤 瑟瑟发抖...
    励志成为签约作家的路人甲阅读 1,638评论 0 1
  • 母亲说,现在的大多数节日,不过是些障眼法。偏偏有的人喜欢以此来考验对方是否在意这些,是否珍视自己宠爱自己。其实是有...
    Biebe阅读 3,434评论 0 3
  • 这里所说的转换,并不是Swift中字面量之间的转换。如果是字面量之间的转换,ios系统中已经自动帮我们转换了。 例...
    Q了个L阅读 5,632评论 0 0