获取android软键盘高度

来源:互联网 发布:大数据专业怎么样 编辑:程序博客网 时间:2024/06/06 11:37

获取android软键盘高度

标签: 软键盘
 1549人阅读 评论(0) 收藏 举报
 分类:

获取Android软键盘高度,虽然是在网上找的方法,不过已亲自测试过,这方法转载太多了,不知道谁是原著了,原作者莫怪。感谢原作者。

MainActivity.Java

[java] view plain copy
  1. public class MainActivity extends Activity {  
  2.   
  3.     private TextView textView;  
  4.   
  5.     @Override  
  6.     protected void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.activity_main);  
  9.         textView = (TextView) findViewById(R.id.textView);  
  10.         SoftKeyBoardListener.setListener(this,new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {  
  11.             @Override  
  12.             public void keyBoardShow(int height) {  
  13.                 Toast.makeText(MainActivity.this"键盘显示 高度" + height, Toast.LENGTH_SHORT).show();  
  14.                 textView.setText(String.valueOf(height));  
  15.             }  
  16.   
  17.             @Override  
  18.             public void keyBoardHide(int height) {  
  19.                 Toast.makeText(MainActivity.this"键盘隐藏 高度" + height, Toast.LENGTH_SHORT).show();  
  20.                 textView.setText("高度:"+String.valueOf(height));  
  21.             }  
  22.         });  
  23.     }  
  24. }  



SoftKeyBoardListener.java

[java] view plain copy
  1. public class SoftKeyBoardListener {  
  2.     private View rootView;//activity的根视图  
  3.     int rootViewVisibleHeight;//纪录根视图的显示高度  
  4.     private OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener;  
  5.   
  6.     public SoftKeyBoardListener(Activity activity) {  
  7.         //获取activity的根视图  
  8.         rootView = activity.getWindow().getDecorView();  
  9.   
  10.         //监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变  
  11.         rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {  
  12.             @Override  
  13.             public void onGlobalLayout() {  
  14.                 //获取当前根视图在屏幕上显示的大小  
  15.                 Rect r = new Rect();  
  16.                 rootView.getWindowVisibleDisplayFrame(r);  
  17.                 int visibleHeight = r.height();  
  18.                 if (rootViewVisibleHeight == 0) {  
  19.                     rootViewVisibleHeight = visibleHeight;  
  20.                     return;  
  21.                 }  
  22.   
  23.                 //根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变  
  24.                 if (rootViewVisibleHeight == visibleHeight) {  
  25.                     return;  
  26.                 }  
  27.   
  28.                 //根视图显示高度变小超过200,可以看作软键盘显示了  
  29.                 if (rootViewVisibleHeight - visibleHeight > 200) {  
  30.                     if (onSoftKeyBoardChangeListener != null) {  
  31.                         onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight - visibleHeight);  
  32.                     }  
  33.                     rootViewVisibleHeight = visibleHeight;  
  34.                     return;  
  35.                 }  
  36.   
  37.                 //根视图显示高度变大超过200,可以看作软键盘隐藏了  
  38.                 if (visibleHeight - rootViewVisibleHeight > 200) {  
  39.                     if (onSoftKeyBoardChangeListener != null) {  
  40.                         onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight - rootViewVisibleHeight);  
  41.                     }  
  42.                     rootViewVisibleHeight = visibleHeight;  
  43.                     return;  
  44.                 }  
  45.   
  46.             }  
  47.         });  
  48.     }  
  49.   
  50.     private void setOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {  
  51.         this.onSoftKeyBoardChangeListener = onSoftKeyBoardChangeListener;  
  52.     }  
  53.   
  54.     public interface OnSoftKeyBoardChangeListener {  
  55.         void keyBoardShow(int height);  
  56.   
  57.         void keyBoardHide(int height);  
  58.     }  
  59.   
  60.     public static void setListener(Activity activity, OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {  
  61.         SoftKeyBoardListener softKeyBoardListener = new SoftKeyBoardListener(activity);  
  62.         softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener);  
  63.     }  
  64. }  



activity_main.xml

[java] view plain copy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical"  
  6.     android:paddingBottom="@dimen/activity_vertical_margin"  
  7.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  8.     android:paddingRight="@dimen/activity_horizontal_margin"  
  9.     android:paddingTop="@dimen/activity_vertical_margin"  
  10.     tools:context=".MainActivity">  
  11.   
  12.     <TextView  
  13.         android:id="@+id/textView"  
  14.         android:layout_width="wrap_content"  
  15.         android:layout_height="wrap_content"  
  16.         android:text="高度:" />  
  17.   
  18.     <EditText  
  19.         android:layout_width="match_parent"  
  20.         android:layout_height="40dp" />  
  21.   
  22. </LinearLayout>  
原创粉丝点击