软键盘的弹出隐藏监听及软键盘高度
2016-09-05 15:30
357 查看
软键盘的弹出隐藏监听及软键盘高度
网上找过很多基本都能做到,就是通过监听根视图高度的变化来判断键盘的弹出和隐藏,但是会出现一个问题,就是当键盘从拼音切换成手写时软键盘依旧是弹出状态,但是高度发生变化,导致监听出现问题。-直接上代码
public class SoftKeyBoardListener { private View rootView;//activity的根视图 int rootViewVisibleHeight = 0;//记录根视图的显示高度 int rootViewHeight = 0; //记录根视图正常显示高度 private OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener; public SoftKeyBoardListener(Activity activity) { //获取activity的根视图 rootView = activity.getWindow().getDecorView(); //监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变 rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver .OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //获取当前根视图在屏幕上显示的大小 Rect r = new Rect(); rootView.getWindowVisibleDisplayFrame(r); int visibleHeight = r.height(); if (rootViewHeight == 0) { rootViewHeight = visibleHeight; } if (rootViewVisibleHeight == 0) { rootViewVisibleHeight = visibleHeight; return; } //根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变 if (rootViewVisibleHeight == visibleHeight) { return; } //根视图显示高度变小超过200,可以看作软键盘显示了 if (rootViewHeight - visibleHeight >= 200) { if (onSoftKeyBoardChangeListener != null) { onSoftKeyBoardChangeListener.keyBoardShow(rootViewHeight - visibleHeight); } rootViewVisibleHeight = visibleHeight; return; } //根视图显示高度变大超过200,同时键盘显示高度应该等于实际高度可以看作软键盘隐藏了 if (visibleHeight - rootViewVisibleHeight > 200 && rootViewHeight == visibleHeight) { if (onSoftKeyBoardChangeListener != null) { onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight - rootViewVisibleHeight); } rootViewVisibleHeight = visibleHeight; return; } } }); } private void setOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) { this.onSoftKeyBoardChangeListener = onSoftKeyBoardChangeListener; } public interface OnSoftKeyBoardChangeListener { void keyBoardShow(int height); void keyBoardHide(int height); } public static void setListener(Activity activity, OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) { SoftKeyBoardListener softKeyBoardListener = new SoftKeyBoardListener(activity); softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener); } }
-使用方法
SoftKeyBoardListener.setListener(MainActivity.this, new SoftKeyBoardListener .OnSoftKeyBoardChangeListener() { @Override public void keyBoardShow(int height) { System.out.println("键盘显示" + height); } @Override public void keyBoardHide(int height) { System.out.println("键盘隐藏" + height); } });
相关文章推荐
- 监听键盘弹出和隐藏,得到键盘高度
- android 监听软键盘弹出和隐藏和4.4系统沉浸式通知栏冲突解决
- 监听键盘的弹出与隐藏(界面跟随键盘一起上下移动)
- android中监听软键盘的弹出与隐藏,并获取软键盘的高度
- Andorid 监听软键盘的隐藏与弹出
- iOS 监听键盘的弹出,收起,并且拿到键盘的高度
- Android监听键盘是否弹出,以及获取软键盘的高度
- iOS监听键盘弹出,获取键盘的高度
- 键盘弹出隐藏监听
- android软键盘弹出隐藏的监听
- Android监听键盘是否弹出,以及获取软键盘的高度
- android 自定义View在弹出的软键盘之上,以及测量软键盘高度和监听软键盘状态
- 在android中键盘弹出和收起会改变window的高度,因此监听window的resize
- iOS获取键盘弹出高度,监听键盘弹出退出
- 监听android键盘弹出隐藏
- android 监听软键盘的弹出与隐藏
- 安卓监听键盘弹出/隐藏
- 监听键盘弹出高度
- 软键盘隐藏和弹出的监听
- 监听全局键盘的弹出与隐藏状态