zoukankan      html  css  js  c++  java
  • Android通过ViewTreeObserver获得输入法键盘弹起后可见区域高度

    需求:项目中需要获取输入法键盘弹起后,手机屏幕可见区域高度(即手机屏幕高度-输入法高度)

    解决方法:OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer),在视图树的全局事件改变时得到通知。

     mRLAll.getViewTreeObserver().addOnGlobalLayoutListener(
                        new OnGlobalLayoutListener() {
                            @SuppressLint("NewApi")
                            public void onGlobalLayout() {
                                //移除布局变化监听
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                                    mRLAll.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                                } else {
                                    mRLAll.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                                }
                                //getWindow().getDecorView().getViewTreeObserver().removeGlobalOnLayoutListener(this);
                                Rect r = new Rect();
                                mRLAll.getWindowVisibleDisplayFrame(r);
                                TestLog.i(TAG, "lent = " + (r.height()));
                                int height = r.height()+r.top;//手机屏幕可见区域高度
                            }
                        });

    note:

      1.mRLAll是当前页面根view  

      2.当前activity未设置全屏幕,所以可见区域高度= r.height()+r.top,r.top是状态栏高度;如果设置为全屏显示,则可见区域高度= r.height()

      3.OnGlobalLayoutListener可能会被多次触发,因此在得到了高度之后,要将OnGlobalLayoutListener移除掉

  • 相关阅读:
    Linux下升级gcc版本(9.1.0版本)
    Linux/CentOS系统同步网络时间的2种方法详解
    为什么使用promise
    总结js深拷贝和浅拷贝
    js闭包理解
    select框实现多选的功能
    动态添加element-ui组件
    总结鼠标移入移出事件
    echarts提示框太长,导致显示不全 ,撑大div框的问题
    vue项目中管理定时器
  • 原文地址:https://www.cnblogs.com/xuepeng0521/p/5570516.html
Copyright © 2011-2022 走看看