键盘显隐监听

港控/mmm° 2021-11-01 20:04 430阅读 0赞
  1. /**
  2. * 类描述:键盘显隐监听<br/>
  3. * 创建人:吴冬冬<br/>
  4. * 创建时间:2019/8/12 15:26 <br/>
  5. */
  6. public class KeyBoardListener implements ViewTreeObserver.OnGlobalLayoutListener {
  7. private final int KEY_BOARD_HEIGHT = IntEKt.dp2px(70);
  8. public interface OnKeyBoardChangeListener {
  9. void keyBoardShow();
  10. void keyBoardHide();
  11. }
  12. /**
  13. * activity 根视图
  14. */
  15. private final View mDecorView;
  16. /**
  17. * 根视图 高度
  18. */
  19. private int mDecorViewHeight;
  20. private OnKeyBoardChangeListener mListener;
  21. public static KeyBoardListener setListener(AppCompatActivity activity, OnKeyBoardChangeListener listener) {
  22. KeyBoardListener keyBoardListener = new KeyBoardListener(activity);
  23. keyBoardListener.setListener(listener);
  24. return keyBoardListener;
  25. }
  26. public void removeListener() {
  27. mDecorView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
  28. mListener = null;
  29. }
  30. private KeyBoardListener(AppCompatActivity activity) {
  31. //获取根视图
  32. mDecorView = activity.getWindow().getDecorView();
  33. //监听视图种全局布局发生改变 或者 视图树中的某个视图的可视状态发生改变
  34. mDecorView.getViewTreeObserver().addOnGlobalLayoutListener(this);
  35. }
  36. public void setListener(OnKeyBoardChangeListener listener) {
  37. mListener = listener;
  38. }
  39. @Override
  40. public void onGlobalLayout() {
  41. //获取当前根视图在屏幕上显示的大小
  42. Rect rect = new Rect();
  43. mDecorView.getWindowVisibleDisplayFrame(rect);
  44. int height = rect.height();
  45. Logger.d("123===", "当前屏幕高度:" + height);
  46. if (height == 0) {
  47. mDecorViewHeight = height;
  48. return;
  49. }
  50. //根视图高度没有变化,可以看作 键盘 显示/隐藏 没有改变
  51. if (mDecorViewHeight == height) {
  52. return;
  53. }
  54. //根视图显示高度 变小 超过 70dp,看作键盘显示
  55. if (mDecorViewHeight - height > KEY_BOARD_HEIGHT) {
  56. mDecorViewHeight = height;
  57. if (mListener != null) {
  58. mListener.keyBoardShow();
  59. }
  60. return;
  61. }
  62. //根视图显示高度 变大 超过 70dp, 看作键盘隐藏
  63. if (height - mDecorViewHeight > KEY_BOARD_HEIGHT) {
  64. mDecorViewHeight = height;
  65. if (mListener != null) {
  66. mListener.keyBoardHide();
  67. }
  68. return;
  69. }
  70. }
  71. }

发表评论

表情:
评论列表 (有 0 条评论,430人围观)

还没有评论,来说两句吧...

相关阅读

    相关 式Intent与式Intent

    intent是Android程序中各组件之间进行交互的一种方式,他不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。intent一般可用作启动活动,启动服务发送

    相关 python实现键盘监听

    这里来展示一个比较有意思的python功能模块:pynput,这个模块里面有关于鼠标和键盘的一些操作,这里给大家分享的是监听键盘操作。 安装 pip i