Android(安卓)软键盘弹出时,EditText固定在键盘上方
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); } } } }; }
好了,本篇文章就这样了,存在不到位的地方还望指导,感谢!
更多相关文章
- Android(安卓)Http协议访问网络
- Android(安卓)studio3.0上运行opencv3.2.0自带人脸识别实例Demo
- android weiget 实时数据更新
- android调用ITelephony类,AIDL实现电话,联系人黑名单拦截挂断服务
- Android(安卓)- MVC、MVP与MVVM架构
- Android初学笔记(记录自己的学习过程,有不对的地方欢迎指出)
- 一步一步学android OpenGL ES2.0编程(1)
- Android(安卓)ActionBar完全解析,使用官方推荐的最佳导航栏(下)
- Android(安卓)自定义View视图