Android虚拟键盘的高度计算
来源:互联网 发布:java 多线程 挂起 编辑:程序博客网 时间:2024/06/06 01:10
系统本身没有提供获取虚拟键盘的方法,在网上查了一些资料,发现还存在一点问题,故此把改好的代码记录下来,以备后用。
需要用OnGlobalLayoutListener来监听app窗口的变化
final View decorView = getActivity().getWindow().getDecorView(); //虚拟按键高度 final int vmKeyHeight = getActivity().getResources().getDimensionPixelSize(getResources().getIdentifier("navigation_bar_height", "dimen", "android")); decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect rect = new Rect(); decorView.getWindowVisibleDisplayFrame(rect); int displayHeight = rect.bottom - rect.top;//可见屏幕的高度,不包括顶部状态栏和底部虚拟按键 int keyboardHeight = decorView.getHeight() - displayHeight - rect.top;//这里要减去顶部状态栏高度,否则会不准,看网上的文章大都没减去状态栏高度 if(isVmKeyShow())//如果显示虚拟按键,则还要减去虚拟按键的高度 keyboardHeight-=vmKeyHeight;//这个就是最终虚拟键盘的高度,后面是数据的使用 } } });
private boolean isVmKeyShow() {//这个方法在三星手机上测试不好用 Display display = getActivity().getWindowManager().getDefaultDisplay(); Point size=new Point(); Point realSize=new Point(); display.getSize(size); display.getRealSize(realSize); return size.y!=realSize.y; }上面判断虚拟按键的方式在三星手机上测试不好用,故此改了整体代码,目的是切换输入法及虚拟按键,保持输入框位置不变,如下
final View decorView = getActivity().getWindow().getDecorView(); //获取虚拟按键高度 int id = getResources().getIdentifier("navigation_bar_height", "dimen", "android"); final int vmKeyHeight =id==0? 0: getActivity().getResources().getDimensionPixelSize(id); decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect rect = new Rect(); decorView.getWindowVisibleDisplayFrame(rect); int displayHeight = rect.bottom - rect.top;//可见屏幕的高度,不包括顶部状态栏和底部虚拟按键 int keyboardHeight = decorView.getHeight() - displayHeight - rect.top;//包括虚拟按键 int bottomHeight = EdoPreference.getInt(EdoPreference.KEY_KEYBOARD_HEIGHT, 0); if(rect.bottom<decorView.getHeight()){//虚拟按键显示 if(keyboardHeight>vmKeyHeight){//键盘处于显示状态 keyboardHeight-=vmKeyHeight; if(keyboardHeight==bottomHeight){ isKeyboardLastShow=true; return; } bottomHeight=keyboardHeight; }else {//只有虚拟按键显示,isKeyboardLastShow是boolean全局变量 if(!isKeyboardLastShow) bottomHeight-=vmKeyHeight; } isKeyboardLastShow=true; }else{ if(isKeyboardLastShow) bottomHeight+=vmKeyHeight; isKeyboardLastShow=false; } if (1.0 * bottomHeight / displayHeight > 0.4) { chatBottomView.setContentViewHeight(bottomHeight); EdoPreference.setPref(EdoPreference.KEY_KEYBOARD_HEIGHT, bottomHeight); } } });
阅读全文
0 0
- Android虚拟键盘的高度计算
- Android, 获取虚拟键盘的高度
- android键盘弹出判断,计算键盘外的高度。
- Android精准的获取底部虚拟键盘的高度
- 在Android中获取虚拟键盘高度的方法
- android-获取虚拟键盘的高度(让虚拟键盘顶部和弹出框底部贴着)
- android虚拟键盘判断和高度获取代码
- 计算键盘高度
- 计算键盘高度
- android 计算listview的高度
- Android 获取虚拟按键的高度
- Android获取虚拟导航键的高度
- Android系统获取键盘的高度。
- 动态计算iOS键盘高度
- iOS根据键盘弹出计算键盘高度
- android 虚拟键盘弹出的问题
- android隐藏虚拟键盘的代码参考
- Android 虚拟键盘的显示与隐藏
- jsp——500错误
- 第13周项目2- 二叉树排序树中查找的路径
- Android基础之动画资源浅析
- Java中的多线程总结
- Android开发之NDK
- Android虚拟键盘的高度计算
- Tensorflow实例:实现基于LSTM的语言模型
- Android开发之WebView的使用(1)
- 三步搭建直播系统源码
- Android开发之WebView的使用(2)
- struts2实现上传文件
- Android Studio中Instant Run
- Android TV Leanback (七)(详情视图)
- python爬虫框架scarpy之AttributeError: module 'scrapy' has no attribute 'spider'