android开发:获取键盘的高度(实测真实有效)
2017-02-13 16:09
423 查看
由于最近在做即时通讯,做类似于微信的点击键盘消失,弹出表情页面(表情页面的高度和键盘的高度一致),于是在网上看了好多android测键盘高度的代码,都多多少少有些问题,于是我自己进行重新编写,终于弄了一个比较ok的测量高度的代码。
//一个静态变量存储高度 public static int keyboardHeight = 0; boolean isVisiableForLast = false; ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = null; public void addOnSoftKeyBoardVisibleListener() { getKeyboradHeight(); if(keyboardHeight>0){ return; } final View decorView = getWindow().getDecorView(); onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect rect = new Rect(); decorView.getWindowVisibleDisplayFrame(rect); //计算出可见屏幕的高度 int displayHight = rect.bottom - rect.top; //获得屏幕整体的高度 int hight = decorView.getHeight(); boolean visible = (double) displayHight / hight < 0.8; int statusBarHeight = 0; try { Class<?> c = Class.forName("com.android.internal.R$dimen"); Object obj = c.newInstance(); Field field = c.getField("status_bar_height"); int x = Integer.parseInt(field.get(obj).toString()); statusBarHeight = getContext().getResources().getDimensionPixelSize(x); } catch (Exception e) { e.printStackTrace(); } if(visible&&visible!= isVisiableForLast){ //获得键盘高度 keyboardHeight = hight - displayHight-statusBarHeight; Logger.sl(Log.DEBUG,"MMSL",keyboardHeight); } isVisiableForLast = visible; } }; decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件