zoukankan      html  css  js  c++  java
  • 怎么监听Android软键盘的打开和关闭

    这个昨天写了蛮近,太费劲了,目前还没有我觉得比较好的方式去解决。

    也查阅了很多朋友的资料和博客,却一直没有完成我需要的效果。

    最后无奈使用了下面这个方法:

     1 public class InputStateLinearLayout  extends LinearLayout{
     2     private OnSizeChangedListener listener;
     3 
     4     public InputStateLinearLayout(Context context) {
     5         super(context);
     6     }
     7 
     8     public InputStateLinearLayout(Context context, AttributeSet attrs) {
     9         super(context, attrs);
    10     }
    11 
    12     public InputStateLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
    13         super(context, attrs, defStyleAttr);
    14     }
    15 
    16     @Override
    17     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    18         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    19     }
    20 
    21     @Override
    22     protected void onLayout(boolean changed, int l, int t, int r, int b) {
    23         super.onLayout(changed, l, t, r, b);
    24     }
    25 
    26     @Override
    27     protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    28         super.onSizeChanged(w, h, oldw, oldh);
    29         if (listener != null) {
    30             listener.onSizeChanged(w, h, oldw, oldh);
    31         }
    32     }
    33 
    34     public void setOnSizeChangedListener(OnSizeChangedListener listener) {
    35         this.listener = listener;
    36     }
    37 
    38     /** * Activity主窗口大小改变时的回调接口(本示例中,等价于软键盘显示隐藏时的回调接口) */
    39     public interface OnSizeChangedListener {
    40         public void onSizeChanged(int w, int h, int oldw, int oldh);
    41     }
    42 }

    以上代码不多说,继续上代码:

    1     mRoot.setOnSizeChangedListener(new InputStateLinearLayout.OnSizeChangedListener() {
    2             @Override
    3             public void onSizeChanged(int w, int h, int oldw, int oldh) {
    4              if (h>oldh){//关闭
    5                //你自己需要处理的逻辑
    6              }
    7             }
    8         });

    mRoot其实就是这个界面的根布局。自己测试得出,h>oldh是关闭,反之打开。

    以上暂时完成了我的需求。

    然后当时我还用到了,监听

    ViewTreeObserver

    虽然也是可以的,但是总归没有达到我的需求。


    转载请注明出处!
  • 相关阅读:
    Android Activity
    Android 五大布局
    Android 使用线性布局LinearLayout和Button实现一个点红块游戏
    邻接表、逆邻接表
    view的绘制原理
    IPC机制
    图的深度优先遍历
    最短路径算法
    几种编码方式
    Android APK反编译问题
  • 原文地址:https://www.cnblogs.com/itpepe/p/4829160.html
Copyright © 2011-2022 走看看