private void controlKeyboardLayout(final View root, final View scrollToView) {   
        root.getViewTreeObserver().addOnGlobalLayoutListener( new 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 > 200) {   
                    int[] location = new int[2];   
                    //获取scrollToView在窗体的坐标   
                    scrollToView.getLocationInWindow(location);   
                    //计算root滚动高度,使scrollToView在可见区域   
                    int srollHeight = (location[1] + scrollToView.getHeight()) - rect.bottom;   
                    root.scrollTo(0, srollHeight); 
                } else {   
                    //键盘隐藏   
                    root.scrollTo(0, 0);   
                }   
            }   
        });   
    }  

标红 数字可适当调节

参考

getLocationInWindow

一个控件在其父窗口中的坐标位置

getLocationOnScreen

一个控件在其整个屏幕上的坐标位置

http://blog.csdn.net/chengyingzhilian/article/details/7452082

http://blog.csdn.net/fuuckwtu/article/details/6519689

   


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

android 手机开启debug日志