解决软键盘弹出遮挡button

在一般登录界面,软键盘弹出时会遮挡登录按钮,网上的解决方法一般都是设置WindowSoftInputMode和scrollview嵌套,但无法达到我想要的效果。

下面这种方法能够解决:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        init();
        addLayoutListener(rootView, bottomView);
    }
    /**
     * @param rootView 根布局
     * @param bottomView 需要显示的最下方View,
     */
    public void addLayoutListener(View rootView, View bottomView) {
        rootView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
            Rect rect = new Rect();
            rootView.getWindowVisibleDisplayFrame(rect);//获取rootView的可视区域
            int invisibleHeight = rootView.getRootView().getHeight() - rect.bottom;//获取rootView的不可视区域高度
            if (invisibleHeight > 150) { //键盘显示 
                int[] location = new int[2];
                bottomView.getLocationInWindow(location); //获取bottomView的坐标
                int scrollHeight = (location[1] + bottomView.getHeight()) - rect.bottom;//算出需要滚动的高度
                if (scrollHeight != 0) {//防止界面元素改变调用监听,使界面上下跳动,如验证码倒计时
                    rootView.scrollTo(0, scrollHeight);
                }
            } else {
                rootView.scrollTo(0, 0);
            }
        });
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者简介 创微信公众号郭霖 WeChat ID: guolin_blog 潇潇凤儿的博客地址: http://b...
    木木00阅读 10,850评论 1 43
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,314评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,241评论 4 61
  • 第九章——第十章 莫琳几乎被哈罗德气疯了,她把自己囚禁在房子里,生怕被别人发现她的谎言,和哈罗德离他而去的不堪...
    周lynn阅读 127评论 0 0
  • 1.本表行提供如下品牌腕表代购。由低到高分别为: 亲民档:天梭,美度,汉密尔顿。 2.高端表 浪琴,康...
    一禾一阅读 513评论 0 0