android 监听软键盘在页面的展开和隐藏
获取软键盘状态思路:
- 获取当前页面根布局及其高度 RootH;
- 获取状态栏高度 StatusH和导航栏高度 NavigationH;
- 获取当前根视图在屏幕上显示的高度RectH;
- 高度差值比较,(根布局高度 - 根视图显示高度)与(状态栏高度 + 导航栏高度)的大小对比;
- 大于:展开软键盘
- 小于:隐藏软键盘
相关代码块:
viewTree的监听
// viewTree的监听
private ViewTreeObserver.OnGlobalLayoutListener keyboardLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {// 显示的根视图 Rect r = new Rect();rootLayout.getWindowVisibleDisplayFrame(r);// 导航栏对象Point navigationBarHeight = SystemUtils.getNavigationBarSize(InformationBaseActivity.this);// 状态栏高度int statusBarHeight = SystemUtils.getStatusBarHeight(InformationBaseActivity.this);Log.e(TAG, "navigationBarHeight " + navigationBarHeight.x + " " + navigationBarHeight.y + statusBarHeight);// (r.bottom - r.top) 当前页面根视图显示的高度// heightDiff 当前页面原本根布局高度与显示视图的高度差int heightDiff = rootLayout.getRootView().getHeight() - (r.bottom - r.top);// 高度差判断是否弹出软键盘if (heightDiff > (100 + navigationBarHeight.y + statusBarHeight)) { // if more than 100 pixels, its probably a keyboard...mIsShowSoft = true;onShowKeyboard(heightDiff);} else {if (mIsShowSoft) {onHideKeyboard();mIsShowSoft = false;}}}};
根布局对viewTree的实时监听
protected void attachKeyboardListeners(int rootViewId) {if (keyboardListenersAttached) {return;}rootLayout = findViewById(rootViewId);rootLayout.getViewTreeObserver().addOnGlobalLayoutListener(keyboardLayoutListener);keyboardListenersAttached = true;}
页面销毁时移除监听
@Overridepublic void onDestroy() {super.onDestroy();if (keyboardListenersAttached) {rootLayout.getViewTreeObserver().removeGlobalOnLayoutListener(keyboardLayoutListener);}}
如何使用:
这些软键盘的监听操作可部署到基类中,需要用时可调用基类中的attachKeyboardListeners(),onShowKeyboard()和onHideKeyboard()方法进行相对应的操作。
项目下载地址
android 监听软键盘在页面的展开和隐藏相关推荐
- Android 监听软键盘按键的三种方式
前言: 我们在Android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的"Go"按键加载url页面:在点击搜索框的时候,点 ...
- Android 监听软键盘的高度并解决其覆盖输入框的问题
1.前言 在某些项目中,我们常常需要自定义一个输入框,软键盘弹出时就把输入框顶上去,关闭时输入框再回到原位(比如下方的效果图,实际上各种 App 中的聊天界面和发布评论的界面大体都是这样).在这个过程 ...
- Android监听软键盘开启关闭状态
最近公司项目有一个功能点是监听软键盘的打开关闭状态,然后来展开不同的布局,后来在StackOverFlow上面找到一位大神提供了解决办法,大致做法如下: 在你需要监听状态的界面activity或者fr ...
- android 软键盘 状态,Android监听软键盘状态
监听软键盘隐藏或显示,代码如下: /** * 监听软键盘状态 */ private void listenerInput() { final LinearLayout ll_main = (Linea ...
- android 键盘回车按钮事件,android 监听软键盘 回车键
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.); imm.hideSoftI ...
- android监听键盘的隐藏,Android监听软键盘的显示和隐藏
使用步骤 xml 布局文件布局,和普通的控件一下 获取SoftInputCanListenerEditText 实例,并设置监听器 Activity 注册的时候android:windowSoftIn ...
- Android App监听软键盘按键的三种方式(转)
最近有类似需求,在csdn上刚好发现,粘贴过来,以防止忘记喽 前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的&quo ...
- Android App监听软键盘按键的三种方式
前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的"GO"按键加载url页面:在点击搜索框的时候,点 ...
- Android 类似淘宝 电商 搜索功能,监听软键盘搜索事件,延迟自动搜索,以及时间排序的搜索历史记录的实现
最近跳槽去新公司,接受的第一个任务是在 一个电商模块的搜索功能以及搜索历史记录的实现. 需求和淘宝等电商的功能大体差不多,最上面一个搜索框,下面显示搜索历史记录.在EditText里输入要搜索的关键字 ...
- Android App监听软键盘按键的三种方式 以及 输入法删除退格键的冲突问题解决
输入法删除退格键的冲突问题解决 /***返回键处理 */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if( even ...
最新文章
- 停用一些不必要的Windows服务
- tableau必知必会之学做时尚的环状条形图(跑道图)
- Quartus ii与Modelsim-altera 6.5b联调前仿真
- 领域模型驱动设计(Domain Driven Design)入门概述
- 在mysql存储过程中拼接sql解决in的字段类型不匹配问题
- ssl证书 pem der cer crt key pfx 概念 沃通证书组合转换及haproxy配置证书
- 通达信完全加密指标破解 通达信完全加密公式源码提取 tni tne tn6还原源文件
- webUploader大文件断点续传学习心得
- rose ha 配置
- [lua]紫猫lua教程-命令宝典-L1-01-03. 数值数据
- IMDB 电影评论情感分类数据集
- 重构kz-admin
- 微信 服务器参数错误 请重新填写,微信上登录验证出现参数错误怎么解决
- 如何获取瘦人肠道菌群_瘦人想要长胖,调节肠道菌群很重要
- MSP430 ADC12 最高采样率测试
- CentOS7.6的详细安装步骤
- python方差分析误差棒_一文讲透,带你学会用Python绘制带误差棒的柱状图和条形图...
- 理想电流源与理想电压源
- 无线技术之争谁将胜出 WiFi、蓝牙还是NFC
- 免费下载英文文献的网站
热门文章
- 科技云报道:深信服桌面云,“大”不一样
- R语言快速入门课——结合各种生物信息学及医学案例,使R语言快速入门——R软件及Rstudio下载(同步课程正在更新中)
- matlab里点除,MATLAB中点除点除
- 微信小程序开发常用代码
- 计算机操作系统---高响应比调度算法,操作系统最高响应比优先调度算法实验报告...
- 【经典算法实现 14】阿克曼函数(手动推导求解、递归实现、非递归实现)
- WPF的prism框架
- 最全,从小白到交互设计大牛的105条设计原则-附PDF资料
- Http请求URL长度限制
- linux彻底卸载 mysql