OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer),在视图树的全局事件改变时得到通知。
ViewTreeObserver不能直接实例化,而是通过getViewTreeObserver()获得。

除了OnGlobalLayoutListener ,ViewTreeObserver常用内部类有:

  • interface ViewTreeObserver.OnGlobalFocusChangeListener
    当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类

  • interface ViewTreeObserver.OnGlobalLayoutListener
    当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类

  • interface ViewTreeObserver.OnPreDrawListener
    当一个视图树将要绘制时,所要调用的回调函数的接口类

  • interface ViewTreeObserver.OnScrollChangedListener
    当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类

  • interface ViewTreeObserver.OnTouchModeChangeListener
    当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类

下面利用OnGlobalLayoutListener来实现软键盘弹出时,EditText固定在键盘上方:

View decorView = getWindow().getDecorView();View contentView = findViewById(Window.ID_ANDROID_CONTENT);decorView.getViewTreeObserver().addOnGlobalLayoutListener(getGlobalLayoutListener(decorView, contentView));
private ViewTreeObserver.OnGlobalLayoutListener getGlobalLayoutListener(final View decorView, final View contentView) {        return new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                Rect r = new Rect();                decorView.getWindowVisibleDisplayFrame(r);                int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels;                int diff = height - r.bottom;                if (diff != 0) {                    if (contentView.getPaddingBottom() != diff) {                        contentView.setPadding(0, 0, 0, diff);                    }                } else {                    if (contentView.getPaddingBottom() != 0) {                        contentView.setPadding(0, 0, 0, 0);                    }                }            }        };    }

好了,本篇文章就这样了,存在不到位的地方还望指导,感谢!

更多相关文章

  1. Android(安卓)Http协议访问网络
  2. Android(安卓)studio3.0上运行opencv3.2.0自带人脸识别实例Demo
  3. android weiget 实时数据更新
  4. android调用ITelephony类,AIDL实现电话,联系人黑名单拦截挂断服务
  5. Android(安卓)- MVC、MVP与MVVM架构
  6. Android初学笔记(记录自己的学习过程,有不对的地方欢迎指出)
  7. 一步一步学android OpenGL ES2.0编程(1)
  8. Android(安卓)ActionBar完全解析,使用官方推荐的最佳导航栏(下)
  9. Android(安卓)自定义View视图

随机推荐

  1. Android 统计图表引擎 AChartEngine (一)
  2. Android个层次调用流程概述
  3. 【Flutter】修改图标、应用名称、包名等
  4. Android MVP 架构介绍
  5. Android Studio使用手册
  6. Android——Broadcast Receiver(广播接收
  7. Android中引入开源库(Eclipse与Android St
  8. Android设置Settings:ListPreference【3】
  9. 【漫漫安卓路之承】android tips
  10. Android小项目:记事本