Android虚拟键盘的高度计算
系统本身没有提供获取虚拟键盘的方法,在网上查了一些资料,发现还存在一点问题,故此把改好的代码记录下来,以备后用。
需要用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() {@Overridepublic 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() {@Overridepublic 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);}}});
Android虚拟键盘的高度计算相关推荐
- android监控虚拟键盘,android虚拟键盘的监控,显示和隐藏
android虚拟键盘的监控,显示和隐藏 听到一个键盘监控[显示.隐藏]的问题,上网找了下解决方案. 有提到使用onSizeChange方法监控的,也有监控onLayout方法的. 思路:在弹出键盘时 ...
- android 虚拟键 高度,Android,获取虚拟键盘的高度
在很多时候,很多需求下,我们都需要得知键盘的高度啊!实在不能理解为什么安卓不提供这样方便的API.虽然没有很好的监听事件,但是我们还是可以制造一个的.想想虚拟键盘弹起来之后界面发生了什么变化?对的,有 ...
- Android 虚拟键盘相关功能大全
移动开发跟虚拟键盘肯定要打交道,下来我们就说说常用的相关情况: 情况一.将键盘右下角的确认更改 android:imeOptions="actionDone" ,软键盘下方变成&q ...
- android 虚拟键盘改变单个按键颜色_这款机械键盘很特别!一亿次按键寿命还有高颜值...
电脑主机要上RGB,那外设自然不能落下,虽说没有60%性能加成,用炫酷的灯光点亮桌面的感觉也是不错的.德国老牌外设品牌--冰豹(ROCCAT)2018年发布了Vulcan系列机械键盘,凭借着独特的设计 ...
- android 虚拟键盘的显示与隐藏问题
焦点改变时如何隐藏虚拟键盘 在开发过程中碰到了一个需求:在点击搜索框后,再点击别的地方,让虚拟键盘隐藏 在焦点改变时,隐藏虚拟键盘.在 listView 中添加焦点监听.其中 mEditText 为所 ...
- android华为手机虚拟键盘盖住底部,Android 虚拟键盘遮挡住页面问题我遇到的坑及个人解决办法...
场景:某个页面多个组件.总体排版正好凑成满屏.一切按照UI给的标注效果图来.大部分机型测试通过.没有问题.华为手机有问题 兼容性:华为手机修改了虚拟键盘的位置.用户可以自由控制显示与隐藏虚拟键盘出现在 ...
- android虚拟键盘InputMethodManager使用
InputMethodService为我们的输入法创建了一个Dialog,并且对某些参数进行了设置,使之能够在底部或者全屏显示. 在Activity中进行调整: AndroidManifet.xml中 ...
- Android虚拟键盘和虚拟触摸驱动
1.虚拟键盘驱动 文件位置:kernel/drivers/input/keyboard/zebra_key.c #include <linux/module.h> #include < ...
- android 虚拟键盘高度,获取Android中虚拟键盘的高度
您可以使用此示例代码.它是肮脏的解决方案,但它的工作 Thread t = new Thread(){ public void run() { int y = mainScreenView.getHe ...
最新文章
- zip/unzip 命令
- AI学会灌水和造假!Google新研究揭露了AI现实应用的陷阱
- linux环境下的小练习
- 吴恩达新书《Machine Learning Yearning》手稿完工,现在全集免费下载!(附pdf下载)
- Linux文本查看命令之touch
- 优化算法笔记|飞蛾扑火优化算法理解及实现
- Java多线程基础知识(一)
- Datawhale 零基础入门数据挖掘-Task3 特征工程
- Java专业人员必备工具 优缺点解析中文版
- 立即释放.net下的com组件
- 【手写数字识别】基于matlab GUI RBM神经网络手写数字识别【含Matlab源码 1109期】
- 使用wsimport命令将wsdl文件生成服务端以及客户端
- double比较大小
- gnome显示桌面图标_「GNOME 3」- 如何显示桌面图标? @20210123
- chr python用法_使用Python内建chr, ord实现的简单的加/解密
- 键盘与鼠标按键的键值对照表
- 对称加密 非对称加密
- chmod的使用 czy:czy 文件名
- 数说CS|中国人民大学高瓴人工智能学院保研生源大起底!
- 华为计算机平台芯片,华为连发两款AI芯片,计算力远超谷歌及英伟达