在 Android 里我们是无法直接获取软键盘高度的,但是在某些场景下,我们又需要获取软键盘的高度。我们可以使用 ViewTreeObserver.OnGlobalLayoutListener来监听窗口大小的变化,当软键盘弹出时,窗口高度会变小,使用原始窗口高度减去当前窗口高度,就可以得出软键盘的高度了。

//记录原始窗口高度

private int mWindowHeight = 0;

private ViewTreeObserver.OnGlobalLayoutListener mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

Rect r = new Rect();

//获取当前窗口实际的可见区域

getWindow().getDecorView().getWindowVisibleDisplayFrame(r);

int height = r.height();

if (mWindowHeight == 0) {

//一般情况下,这是原始的窗口高度

mWindowHeight = height;

} else {

if (mWindowHeight != height) {

//两次窗口高度相减,就是软键盘高度

int softKeyboardHeight = mWindowHeight - height;

System.out.println("SoftKeyboard height = " + softKeyboardHeight);

}

}

}

};

一般我们在 Activity 的 onCreate()方法中开始监听:

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//......

getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);

}

请注意当 Activity 被销毁的时候,一定要移除监听,否则就会产生内存泄漏:

@Override

protected void onDestroy() {

super.onDestroy();

getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(mGlobalLayoutListener);

}

通过以上方法可以实时监听软键盘的高度变化,特别是像有些输入法例如搜狗,可以随时切换拼音输入、手写输入,这个时候软键盘的高度都会发生变化。

除此之外,还可以通过该方法判断软键盘是否弹出。

android获得键盘高度,Android获取软键盘高度相关推荐

  1. h5如何动态获取键盘高度_js获取软键盘高度

    没有相关的事件来获取隐藏按钮点击,keydown/keyup事件中获取到的keyCode都是0,楚了你说的前往keyCode 13. 可以用计时器监视window.innerHeight高度改变来判断 ...

  2. Android中获取软键盘状态和软键盘高度

    应用场景 在Android应用中有时会需要获取软键盘的状态(即软键盘是显示还是隐藏)和软键盘的高度.这里列举了一些可能的应用场景. 场景一 当软键盘显示时,按下返回键应当是收起软键盘,而不是回退到上一 ...

  3. android 键盘遮盖输入框_Android软键盘挡住输入框的终极解决方案

    前言 开发做得久了,总免不了会遇到各种坑. 而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑--来来来,我们慢慢看. 入门篇 最基本的情况,如图所示:在页面底部有一 ...

  4. Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态

    最近在项目中,需要获取到软键盘的高度,再将底部的布局上移键盘的高度,话不多说,直接上代码: 获取软键盘高度 //一个静态变量存储高度public static int keyboardHeight = ...

  5. Android 获取软键盘的删除delete事件

    对于软键盘删除事件,网上有很多方案是如下,但是 google api也说明了,这个只是监听硬件键盘,对于软键盘并不负责触发(我测试了一下,软键盘能够监听delete键,其他键像数字字母等没有触发这里的 ...

  6. Android爬坑之旅:软键盘挡住输入框问题的终极解决方式

    本文由BarryZhang原创,同一时候首发于diycode.cc.barryzhang.com .github.com/barryhappy.非商业转载请注明作者和原文链接. 前言 开发做得久了.总 ...

  7. Android爬坑之旅:软键盘挡住输入框问题的终极解决方案

    前言 开发做得久了,总免不了会遇到各种坑. 而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑--来来来,我们慢慢看. 入门篇 Base 最基本的情况,如图所示:在页 ...

  8. android 调出键盘表情_android 表情,软键盘冲突解决方案(仿微博等SNS应用)

    之前总想搞一下这个模块,可是由于忙碌总是推迟,现在就把这块好好的弥补过来,下面是我实现的思路.本人才疏学浅,还望大家不要见笑. 首先我们还是先看写示例: 上面应用应该不用我过多介绍,下面我简单介绍下我 ...

  9. android隐藏软键盘方法,Android使用InputMethodManager显示和隐藏软键盘

    Android主要用InputMethodManager来对软键盘进行管理.手动显示或隐藏软键盘前需要先获取InputMethodManager. InputMethodManager imm = ( ...

最新文章

  1. 当老板说要把公司当家时,他在说...
  2. 一站式学习Redis 从入门到高可用分布式实践(慕课)第十章 缓存设计与优化
  3. c++内存管理优化之ptmalloc,tcmalloc,jemalloc使用实例
  4. MySQL----示例知识点整理
  5. 为什么谷歌要执行严格的代码编写规范
  6. 代码段:js表单提交检测
  7. Android UI学习之SeekBar
  8. 添加内核驱动模块(3)(mydriver.c+ Konfig+Makefile )
  9. 机器人 迷宫算法_机器人,迷宫和附属建筑
  10. 腾讯云即时通信IM知识详解
  11. Bug解决-RuntimeError: Sizes of tensors must match except in dimension 2. Got 320 and 160 (The offendin
  12. matlab里的pid参数调节,基于MATLAB的PID控制系统参数调节
  13. containers详解
  14. 超低延迟直播~毫秒级直播观看体验(实测效果)
  15. 使用docsify+markdown+vditor构建gitlab pages文档库
  16. Android直播头像动画,iOS 仿抖音直播头像缩放动画
  17. Linux查看网络即时网速
  18. ARIMA时序模型预测股价波动情况
  19. Java基础看这篇就足够用了(基础知识汇总)
  20. 【2014年计划】- 文理兼修+中西合璧

热门文章

  1. Ubuntu命令笔记
  2. 【职场进阶】入职没有几天就离职是什么心态?
  3. 带你彻底搞懂MyBatis的底层实现之缓存模块(Cache)-吊打面试官必备技能
  4. 在html中表单对象以什么标记开始,HTML学习笔记——表单
  5. 快速get进程、线程基础知识
  6. mysql 1443_MySQL 1443:這是什么意思?
  7. DeepMind再爆性骚扰丑闻!内部邮件泄露,色狼自夸猛男
  8. JCL,JES运作流程
  9. Note For Linux By Jes(4)-文件的压缩与打包
  10. 网龙入股大数据智能教育平台 -- “爱多分”