可以监听输入法键盘的打开和关闭动作,通过回调精准判断,兼容几乎所有手机

原理:

在输入法打开和关闭的时候会引起当前界面的高度变化,从而出发onLayout方法,所以我们监听layout动作,当触发此方法时,判断当前界面可视部分的高度变化
package com.shixi.didihr.utils;import android.app.Activity;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.ViewTreeObserver;import java.lang.reflect.Method;/*** Created by Miller Zhang  on 2016/12/27.* desc:* github:https://github.com/zxyaust  CSDN:http://blog.csdn.net/qq_31340657* Whatever happens tomorrow,we've had today.*/public class ScreenUtil {private final Activity activity;private OnInputActionListener listener;public ScreenUtil(Activity activity) {this.activity = activity;}/*** @return 底部的虚拟栏的高度*/public int getBottomKeyboardHeight() {int screenHeight = getAccurateScreenDpi()[1];DisplayMetrics dm = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getMetrics(dm);//去除底部虚拟栏之后的metricint heightDifference = screenHeight - dm.heightPixels;return heightDifference;}/*** 获取实际的屏幕尺寸,所有的连同底部虚拟栏*/public int[] getAccurateScreenDpi() {int[] screenWH = new int[2];Display display = activity.getWindowManager().getDefaultDisplay();DisplayMetrics dm = new DisplayMetrics();try {Class<?> c = Class.forName("android.view.Display");Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);method.invoke(display, dm);screenWH[0] = dm.widthPixels;screenWH[1] = dm.heightPixels;} catch (Exception e) {e.printStackTrace();}return screenWH;}/*** 监听某个页面上输入法键盘打开动作** @param view     要实现监听的页面上的任意一个view都可以* @param listener 监听接口*/public void observeInputlayout(final View view, OnInputActionListener listener) {this.listener = listener;view.postDelayed(new Runnable() {@Overridepublic void run() {observe(view);}}, 500);}private void observe(View view) {view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {//当键盘弹出隐藏的时候会 调用此方法。@Overridepublic void onGlobalLayout() {Rect r = new Rect();//获取当前界面可视部分activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);//获取屏幕的高度int screenHeight = activity.getWindow().getDecorView().getRootView().getHeight();//此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数int heightDifference = screenHeight - r.bottom;if (heightDifference > getBottomKeyboardHeight()) {//有些手机用的是底部虚拟键,所以要大于虚拟键的高度listener.onOpen();} else {listener.onClose();}}});}public interface OnInputActionListener {void onOpen();void onClose();}}

使用方法:

把上面的类复制到自己项目里面,然后调用下面方法:
new ScreenUtil(getActivity()).observeInputlayout(view, new ScreenUtil.OnInputActionListener() {@Overridepublic void onOpen() {startAniout();}@Overridepublic void onClose() {startAniIn();}});

安卓监听输入法键盘打开关闭(兼容虚拟按键栏的手机,比如华为)相关推荐

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

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

  2. android 隐藏输入法时自动关闭弹窗,Android监听输入法弹窗和关闭的实现方法

    用过ios的都知道ios上输入法关闭的同时会自动关闭输入框,那么在android上如何实现监听输入法弹出和关闭呢?本篇文章就为你提供了一种可靠的实现方式. 首先在AndroidManifest中配置 ...

  3. android 键盘隐藏监听,安卓监听软键盘弹出与隐藏的两种方法

    需求: 现在有一个需求是点击一行文本框,弹出一个之前隐藏的输入框,输入完成后按返回键或者其他的东西隐藏键盘和输入框,将输入框的内容填充到文本框中. 实现: 拿到这个需求的第一反应就是写一个监听来监听键 ...

  4. 安卓监听软键盘搜索键

    1.EditText中添加**android:imeOptions="actionSearch"  android:singleLine="true"**两行, ...

  5. 【Android应用】【监听软键盘弹起与关闭】

    [背景] 在很多App开发过程中需要在Activity中监听Android设备的软键盘弹起与关闭,但是Android似乎没有提供相关的的监听API给我们来调用,本文提供了一个可行的办法来监听软键盘的弹 ...

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

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

  7. React Native - Keyboard API使用详解(监听处理键盘事件)

    参考: React Native - Keyboard API使用详解(监听处理键盘事件) 当我们点击输入框时,手机的软键盘会自动弹出,以便用户进行输入. 但有时我们想在键盘弹出时对页面布局做个调整, ...

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

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

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

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

最新文章

  1. Oracle数据库的逻辑结构和存储层次
  2. 前端面试题(二)框架篇
  3. ALGO-22_蓝桥杯_算法训练_数的划分(DP)
  4. java xml文件内容替换_java读取xml文件并转换成对象,并进行修改
  5. 计算机操作系统还能这样玩?这一篇计算机操作系统的总结为你保驾护航(零风险、高质量、万字长文、建议收藏)
  6. mysql over rank_SQL学习笔记 - 窗口函数OVER
  7. python编辑器背景设置为黑色_VScode 配置为Python编辑器
  8. Andorid学习笔记(ADT)-LogCat日志调试工具
  9. 中式国风地产创意海报素材模板
  10. HDU 2577 How to Type
  11. ddwrt 扩张linux分区,『2010.8.9』DDWRT脱机下载+架设网站修正加强版tar.gz模式发布(修复下载地址)...
  12. 网上购物与开店赢家随身查
  13. Mac端Java开发分析工具JProfiler 13.0.1
  14. idea project settings在哪_IntelliJ IDEA如何对project的目录进行筛选显示?
  15. adb命令刷机vivox20_vivo手机锁屏密码忘了怎么办?vivo手机强制解锁的三种方法
  16. tapestry5的response使用
  17. fibonacci数列java大赛_斐波那契数列 java 解法
  18. Mixly01:米思齐(Mixly)简介
  19. 微信后台服务器能查撤回的消息吗,微信撤回的消息还能看到吗?查看方法介绍...
  20. SQL Server 遇到报错解决办法--更新中

热门文章

  1. 最后三到四次重复是肌肉增长的原因,这期间的痛苦决定了你是冠军还是熊包。—— 阿诺德施瓦辛格
  2. 微信小程序swiper图片尺寸_微信小程序 - swiper 高度自适应
  3. 如何成为优秀软件设计师
  4. 线性规划整数规划求解器SCIP的失败使用 与 GLPK的成功使用
  5. 环信实现基本聊天功能
  6. 前端生成pdf 下载
  7. Eclipse 启动无响应,启动慢解决
  8. win电脑版敬业签怎么用便签快捷键删除便签内容?
  9. 2016年4月12日。
  10. 家政服务小程序制作攻略揭秘