获取软键盘状态思路:

  1. 获取当前页面根布局及其高度 RootH;
  2. 获取状态栏高度 StatusH和导航栏高度 NavigationH;
  3. 获取当前根视图在屏幕上显示的高度RectH;
  4. 高度差值比较,(根布局高度 - 根视图显示高度)与(状态栏高度 + 导航栏高度)的大小对比;
  5. 大于:展开软键盘
  6. 小于:隐藏软键盘

相关代码块:

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 监听软键盘在页面的展开和隐藏相关推荐

  1. Android 监听软键盘按键的三种方式

    前言: 我们在Android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的"Go"按键加载url页面:在点击搜索框的时候,点 ...

  2. Android 监听软键盘的高度并解决其覆盖输入框的问题

    1.前言 在某些项目中,我们常常需要自定义一个输入框,软键盘弹出时就把输入框顶上去,关闭时输入框再回到原位(比如下方的效果图,实际上各种 App 中的聊天界面和发布评论的界面大体都是这样).在这个过程 ...

  3. Android监听软键盘开启关闭状态

    最近公司项目有一个功能点是监听软键盘的打开关闭状态,然后来展开不同的布局,后来在StackOverFlow上面找到一位大神提供了解决办法,大致做法如下: 在你需要监听状态的界面activity或者fr ...

  4. android 软键盘 状态,Android监听软键盘状态

    监听软键盘隐藏或显示,代码如下: /** * 监听软键盘状态 */ private void listenerInput() { final LinearLayout ll_main = (Linea ...

  5. android 键盘回车按钮事件,android 监听软键盘 回车键

    InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.); imm.hideSoftI ...

  6. android监听键盘的隐藏,Android监听软键盘的显示和隐藏

    使用步骤 xml 布局文件布局,和普通的控件一下 获取SoftInputCanListenerEditText 实例,并设置监听器 Activity 注册的时候android:windowSoftIn ...

  7. Android App监听软键盘按键的三种方式(转)

    最近有类似需求,在csdn上刚好发现,粘贴过来,以防止忘记喽 前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的&quo ...

  8. Android App监听软键盘按键的三种方式

    前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的"GO"按键加载url页面:在点击搜索框的时候,点 ...

  9. Android 类似淘宝 电商 搜索功能,监听软键盘搜索事件,延迟自动搜索,以及时间排序的搜索历史记录的实现

    最近跳槽去新公司,接受的第一个任务是在 一个电商模块的搜索功能以及搜索历史记录的实现. 需求和淘宝等电商的功能大体差不多,最上面一个搜索框,下面显示搜索历史记录.在EditText里输入要搜索的关键字 ...

  10. Android App监听软键盘按键的三种方式 以及 输入法删除退格键的冲突问题解决

    输入法删除退格键的冲突问题解决 /***返回键处理 */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if( even ...

最新文章

  1. 停用一些不必要的Windows服务
  2. tableau必知必会之学做时尚的环状条形图(跑道图)
  3. Quartus ii与Modelsim-altera 6.5b联调前仿真
  4. 领域模型驱动设计(Domain Driven Design)入门概述
  5. 在mysql存储过程中拼接sql解决in的字段类型不匹配问题
  6. ssl证书 pem der cer crt key pfx 概念 沃通证书组合转换及haproxy配置证书
  7. 通达信完全加密指标破解 通达信完全加密公式源码提取 tni tne tn6还原源文件
  8. webUploader大文件断点续传学习心得
  9. rose ha 配置
  10. [lua]紫猫lua教程-命令宝典-L1-01-03. 数值数据
  11. IMDB 电影评论情感分类数据集
  12. 重构kz-admin
  13. 微信 服务器参数错误 请重新填写,微信上登录验证出现参数错误怎么解决
  14. 如何获取瘦人肠道菌群_瘦人想要长胖,调节肠道菌群很重要
  15. MSP430 ADC12 最高采样率测试
  16. CentOS7.6的详细安装步骤
  17. python方差分析误差棒_一文讲透,带你学会用Python绘制带误差棒的柱状图和条形图...
  18. 理想电流源与理想电压源
  19. 无线技术之争谁将胜出 WiFi、蓝牙还是NFC
  20. 免费下载英文文献的网站

热门文章

  1. 科技云报道:深信服桌面云,“大”不一样
  2. R语言快速入门课——结合各种生物信息学及医学案例,使R语言快速入门——R软件及Rstudio下载(同步课程正在更新中)
  3. matlab里点除,MATLAB中点除点除
  4. 微信小程序开发常用代码
  5. 计算机操作系统---高响应比调度算法,操作系统最高响应比优先调度算法实验报告...
  6. 【经典算法实现 14】阿克曼函数(手动推导求解、递归实现、非递归实现)
  7. WPF的prism框架
  8. 最全,从小白到交互设计大牛的105条设计原则-附PDF资料
  9. Http请求URL长度限制
  10. linux彻底卸载 mysql