安卓监听输入法键盘打开关闭(兼容虚拟按键栏的手机,比如华为)
可以监听输入法键盘的打开和关闭动作,通过回调精准判断,兼容几乎所有手机
原理:
在输入法打开和关闭的时候会引起当前界面的高度变化,从而出发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();}});
安卓监听输入法键盘打开关闭(兼容虚拟按键栏的手机,比如华为)相关推荐
- Android监听软键盘开启关闭状态
最近公司项目有一个功能点是监听软键盘的打开关闭状态,然后来展开不同的布局,后来在StackOverFlow上面找到一位大神提供了解决办法,大致做法如下: 在你需要监听状态的界面activity或者fr ...
- android 隐藏输入法时自动关闭弹窗,Android监听输入法弹窗和关闭的实现方法
用过ios的都知道ios上输入法关闭的同时会自动关闭输入框,那么在android上如何实现监听输入法弹出和关闭呢?本篇文章就为你提供了一种可靠的实现方式. 首先在AndroidManifest中配置 ...
- android 键盘隐藏监听,安卓监听软键盘弹出与隐藏的两种方法
需求: 现在有一个需求是点击一行文本框,弹出一个之前隐藏的输入框,输入完成后按返回键或者其他的东西隐藏键盘和输入框,将输入框的内容填充到文本框中. 实现: 拿到这个需求的第一反应就是写一个监听来监听键 ...
- 安卓监听软键盘搜索键
1.EditText中添加**android:imeOptions="actionSearch" android:singleLine="true"**两行, ...
- 【Android应用】【监听软键盘弹起与关闭】
[背景] 在很多App开发过程中需要在Activity中监听Android设备的软键盘弹起与关闭,但是Android似乎没有提供相关的的监听API给我们来调用,本文提供了一个可行的办法来监听软键盘的弹 ...
- Android App监听软键盘按键的三种方式 以及 输入法删除退格键的冲突问题解决
输入法删除退格键的冲突问题解决 /***返回键处理 */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if( even ...
- React Native - Keyboard API使用详解(监听处理键盘事件)
参考: React Native - Keyboard API使用详解(监听处理键盘事件) 当我们点击输入框时,手机的软键盘会自动弹出,以便用户进行输入. 但有时我们想在键盘弹出时对页面布局做个调整, ...
- Android App监听软键盘按键的三种方式(转)
最近有类似需求,在csdn上刚好发现,粘贴过来,以防止忘记喽 前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的&quo ...
- Android App监听软键盘按键的三种方式
前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的"GO"按键加载url页面:在点击搜索框的时候,点 ...
最新文章
- Oracle数据库的逻辑结构和存储层次
- 前端面试题(二)框架篇
- ALGO-22_蓝桥杯_算法训练_数的划分(DP)
- java xml文件内容替换_java读取xml文件并转换成对象,并进行修改
- 计算机操作系统还能这样玩?这一篇计算机操作系统的总结为你保驾护航(零风险、高质量、万字长文、建议收藏)
- mysql over rank_SQL学习笔记 - 窗口函数OVER
- python编辑器背景设置为黑色_VScode 配置为Python编辑器
- Andorid学习笔记(ADT)-LogCat日志调试工具
- 中式国风地产创意海报素材模板
- HDU 2577 How to Type
- ddwrt 扩张linux分区,『2010.8.9』DDWRT脱机下载+架设网站修正加强版tar.gz模式发布(修复下载地址)...
- 网上购物与开店赢家随身查
- Mac端Java开发分析工具JProfiler 13.0.1
- idea project settings在哪_IntelliJ IDEA如何对project的目录进行筛选显示?
- adb命令刷机vivox20_vivo手机锁屏密码忘了怎么办?vivo手机强制解锁的三种方法
- tapestry5的response使用
- fibonacci数列java大赛_斐波那契数列 java 解法
- Mixly01:米思齐(Mixly)简介
- 微信后台服务器能查撤回的消息吗,微信撤回的消息还能看到吗?查看方法介绍...
- SQL Server 遇到报错解决办法--更新中