怎么監聽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

雖然也是可以的,但是總歸沒有達到我的需求。


轉載請注明出處!

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: