android 监听软键盘的收起与打开

参考: http://toughcoder.net/blog/2015/10/09/android-trick-detect-soft-keyboard-show-slash-hide/

 1 package xiamai.testidea;
 2 
 3 import android.app.Activity;
 4 import android.graphics.Rect;
 5 import android.os.Bundle;
 6 import android.util.DisplayMetrics;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 import android.view.ViewTreeObserver;
10 
11 /**
12  * Created by Administrator on 2016/6/15.
13  */
14 public class BaseActivity extends Activity
15 {
16     private OnKeyboardListener keyboardListener;
17     private boolean     keyboardVisible = false;
18     private ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener()
19     {
20         @Override
21         public void onGlobalLayout()
22         {
23             if (keyboardIsVisible(getRootView()))
24             {
25                 if (!keyboardVisible)
26                 {
27                     keyboardVisible = true;
28                     keyboardListener.onKeyboardShow();
29                 }
30             }
31             else
32             {
33                 if (keyboardVisible)
34                 {
35                     keyboardVisible = false;
36                     keyboardListener.onKeyboardHidden();
37                 }
38             }
39         }
40     };
41 
42     public View getRootView()
43     {
44         return ((ViewGroup)findViewById(android.R.id.content)).getChildAt(0);
45     }
46 
47     protected void setOnKeyboardListener(OnKeyboardListener keyboardListener)
48     {
49         this.keyboardListener = keyboardListener;
50         getRootView().getViewTreeObserver().addOnGlobalLayoutListener(globalLayoutListener);
51     }
52 
53     private boolean keyboardIsVisible(View rootView)
54     {
55         final int softKeyboardHeight = 100;
56         Rect r = new Rect();
57         rootView.getWindowVisibleDisplayFrame(r);
58         DisplayMetrics dm = rootView.getResources().getDisplayMetrics();
59         int heightDiff = rootView.getBottom() - r.bottom;
60         return heightDiff > softKeyboardHeight * dm.density;
61     }
62 
63     public interface OnKeyboardListener
64     {
65         void onKeyboardShow();
66         void onKeyboardHidden();
67     }
68 }
View Code
 1 package xiamai.testidea;
 2 
 3 import android.os.Bundle;
 4 import android.util.Log;
 5 
 6 /**
 7  * Created by Administrator on 2016/7/11.
 8  */
 9 public class KeyboardTestActivity extends BaseActivity
10     implements BaseActivity.OnKeyboardListener
11 {
12     @Override
13     protected void onCreate(Bundle savedInstanceState)
14     {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.root_activity);
17         setOnKeyboardListener(this);
18     }
19 
20     @Override
21     public void onKeyboardShow()
22     {
23         Log.e("KeyboardEvent", "键盘打开");
24     }
25 
26     @Override
27     public void onKeyboardHidden()
28     {
29         Log.e("KeyboardEvent", "键盘关闭");
30     }
31 }
View Code

 

转载于:https://www.cnblogs.com/emyueguang/p/5661003.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值