当前位置: 首页 > news >正文

Android 软件盘的弹出和消失的监听

监听接口 OnKeyboardListener.java

    public interface OnKeyboardListener {void onKeyboardHidden();void onKeyboardShow(int keyboardHeight);}
KeyBoardUtil.java
public class KeyBoardUtil {private final static String TAG = "KeyBoardUtil";public  PopupWindow popupWindow;public static void showSoftInput(EditText edit) {edit.setFocusable(true);edit.setFocusableInTouchMode(true);edit.requestFocus();InputMethodManager imm = (InputMethodManager) edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);imm.showSoftInput(edit, 0);edit.setSelection(edit.length());}public static void hideSoftInput(EditText edit) {InputMethodManager imm = (InputMethodManager) edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);}private  ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener;public void observerKeyboard(Activity activity, OnKeyboardListener keyboardListener) {View rootView = new View(activity);popupWindow = new PopupWindow(activity);try {rootView.setLayoutParams(new ViewGroup.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT));popupWindow.setContentView(rootView);popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);popupWindow.setBackgroundDrawable(new ColorDrawable(0));popupWindow.setTouchable(false);popupWindow.showAtLocation(activity.getWindow().getDecorView(), Gravity.NO_GRAVITY, 0, 0);} catch (WindowManager.BadTokenException e) {Log.d(TAG, "observerKeyboard: " , e);}if (onGlobalLayoutListener == null) {onGlobalLayoutListener = getGlobalObserver(rootView, keyboardListener);}rootView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);}private  ViewTreeObserver.OnGlobalLayoutListener getGlobalObserver(View rootView, OnKeyboardListener keyboardListener) {HeightWrapper wrapper = new HeightWrapper();Rect rootRect = new Rect();Context context = rootView.getContext();((Activity)context).getWindow().getDecorView().getWindowVisibleDisplayFrame(rootRect);return () -> {Rect r = new Rect();rootView.getWindowVisibleDisplayFrame(r);int height = r.height();if (wrapper.getHeight() == 0) {wrapper.setHeight(height);} else {if (wrapper.getHeight() != height){Log.i(TAG,"keyboard wrapper height = "+wrapper.getHeight() + "heigth = "+height);int diff = wrapper.getHeight() - height;if (diff < -200 && rootRect.bottom == r.bottom) {keyboardListener.onKeyboardHidden();}else {keyboardListener.onKeyboardShow(ScreenUtils.getScreenRealHeight() - r.bottom);}wrapper.setHeight(height);}}};}public void clearObserver() {onGlobalLayoutListener = null;if (popupWindow != null) {popupWindow.dismiss();popupWindow.getContentView().getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener);}popupWindow = null;}static class HeightWrapper {int height = 0;public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}}}

在activity 中初始化完UI以后,添加如下代码:

        view.viewTreeObserver.addOnGlobalLayoutListener {if (mKeyBoardUtil == null) {mKeyBoardUtil = KeyBoardUtil()mKeyBoardUtil?.observerKeyboard(requireActivity(),object : KeyBoardUtil.OnKeyboardListener {override fun onKeyboardHidden() {Log.i(TAG, "onKeyboardHidden")}override fun onKeyboardShow(keyboardHeight: Int) {Log.i(TAG, "onKeyboardShow")}})}}

 在activity ondestory中调用:

        mKeyBoardUtil?.clearObserver()

相关文章:

Android 软件盘的弹出和消失的监听

监听接口 OnKeyboardListener.java public interface OnKeyboardListener {void onKeyboardHidden();void onKeyboardShow(int keyboardHeight);} KeyBoardUtil.java public class KeyBoardUtil {private final static String TAG "KeyBoardUtil";public PopupWi…...

通俗易懂HTTP和HTTPS区别

HTTP&#xff1a;超文本传输协议&#xff0c;它是使用一种明文的方式发送我们的内容&#xff0c;没有任何的加密&#xff0c;例如我们要在网页上输入账号密码&#xff0c;如果使用HTTP协议&#xff0c;账号密码就可能会被暴露&#xff0c;默认端口是80. HTTPS&#xff1a;是HT…...

【ZZULIOJ】1061: 顺序输出各位数字(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 输入一个不大于10的9次方的正整数&#xff0c;从高位开始逐位分割并输出各位数字。 输入 输入一个正整数n,n是int型数据 输出 依次输出各位上的数字&#xff0c;每一个数字后面有一个空格…...

java数据结构与算法刷题-----LeetCode260. 只出现一次的数字 III

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 与运算取末尾1分组 与运算取末尾1分组 解题思路&#xff1a;时间…...

AWS被误扣费了,怎么解决?

有时在使用aws时&#xff0c;可能会无意中被AWS扣费&#xff0c;对于如何处理这个问题&#xff0c;作为aws的合作伙伴&#xff0c;接下来由九河云进行讲解&#xff1a; &#xff08;1&#xff09;审查账单&#xff1a;首先&#xff0c;您需要仔细审查AWS账单&#xff0c;了解具…...

再传IPO消息,SHEIN的上市为何充满变数?

据《金融时报》援引消息人士报道&#xff0c;SHEIN正在等待北京监管部门的批准&#xff0c;以推进在纽约或伦敦的重磅上市。 几乎每隔一段时间&#xff0c;SHEIN即将上市的消息就会成为媒体关注的焦点&#xff0c;但每一次报道都“没有下文”&#xff0c;再加上SHEIN官方的“拒…...

maven bom

BOM(Bill of Materials)是由Maven提供的功能,它通过定义一整套相互兼容的jar包版本集合,使用时只需要依赖该BOM文件,即可放心的使用需要的依赖jar包,且无需再指定版本号。BOM的维护方负责版本升级,并保证BOM中定义的jar包版本之间的兼容性。 为什么要使用BOM 使用BOM除…...

若依vue中关于字典的使用

文章目录 字典管理页面列表点击某个字典类型展示具体字典数据修改某一条字典数据 字典的应用一般用于select多选框中代码实现根据字典Dict的value获取Label&#xff0c;类似于通过key获得value 源码解析 字典管理页面 列表 点击某个字典类型展示具体字典数据 修改某一条字典数…...

链表题(哑结点的使用)

给定一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 首先面对删除链表节点的操作&#xff0c;我们通常是将该节点的上一个节点的next指向该节点的下一个节点&#xff0c;从而将这个节点置空&#xff0c;达到删除节点的操作。 但是我们会碰…...

C#:求三个整数的最大值

任务描述 本关任务&#xff1a;编写一个程序&#xff0c;实现从键盘输入的三个整数&#xff0c;输出三个整数的最大值。 编程要求 根据提示&#xff0c;在右侧编辑器补充代码&#xff0c;计算并输出从键盘输入的三个数的最大值。 测试说明 平台会对你编写的代码进行测试&…...

广州南沙番禺联想SR530服务器主板传感器故障维修

今日分享一例广州市南沙区联想ThinkSystem SR530服务器sensor sysbrd vol故障问题维修案例&#xff1b; 服务器型号是&#xff1a;Lenovo thinksystem sr530 g6服务器 服务器所在位置&#xff1a;广东省广州市南沙区 服务器故障问题&#xff1a;机房异常停电&#xff0c;来电后…...

深入探索自然语言处理:用Python和BERT构建文本分类模型

在当今的信息时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术正在改变我们理解和处理自然语言的方式。NLP使计算机能够解读、理解和生成人类语言&#xff0c;从而在多种应用中实现自动化&#xff0c;如聊天机器人、情感分析和文本分类。本文将详细介绍如何使用Py…...

在Visual Studio Code中编辑React项目时,以下是一些推荐的扩展

ESLint&#xff1a;这个扩展可以集成ESLint到VS Code中&#xff0c;帮助你在编写代码时发现和修复JavaScript和TypeScript的语法错误和代码风格问题。 Prettier - Code formatter&#xff1a;Prettier是一个代码格式化工具&#xff0c;可以自动格式化你的代码以保持一致的代码…...

智算时代的基础设施如何实现可继承可演进?浪潮云海发布 InCloud OS V8 新一代架构平台

从 2023 年开始持续火爆的 AIGC 正在加速落地应用&#xff0c;为全行业带来生产生活效率的变革与升级。面对数字化转型与智能化转型&#xff0c;对于技术团队来说&#xff0c;既要根据业务与 AI 应用去部署以云为基础的 AI 算力&#xff0c;又要与已有数据和系统&#xff08;甚…...

LDF、DBC、BIN、HEX、S19、BLF、ARXML、slx等

文章目录 如题 如题 LDF是LIN报文格式文件&#xff0c;把这个直接拖到软件里面&#xff0c;可以发报文和接收报文 DBC是CAN报文格式文件&#xff0c;把这个直接拖到软件里面&#xff0c;可以发报文和接收报文 BIN文件烧录在BOOT里面&#xff08;stm32&#xff09;&#xff0c…...

因为使用ArrayList.removeAll(List list)导致的机器重启

背景 先说一下背景&#xff0c;博主所在的业务组有一个核心系统&#xff0c;需要同步两个不同数据源给过来的数据到redis中&#xff0c;但是每次同步之前需要过滤掉一部分数据&#xff0c;只存储剩下的数据。每次同步的数据与需要过滤掉的数据量级大概在0-100w的数据不等。 由…...

Let‘s Encrypt

创建文件夹 mkdir /usr/local/develop/ 安装Certbot客户端 yum install certbot 首先确保example.com和www.example.com这两个域名通过DNS解析绑定了你的web 服务器的公网 IP 就是说先要完成域名解析到服务器 下面命令会验证 /var/www/example 他会将一些命令文件存在…...

C语言 | Leetcode C语言题解之第24题两两交换链表中的节点

题目&#xff1a; 题解&#xff1a; struct ListNode* swapPairs(struct ListNode* head) {struct ListNode dummyHead;dummyHead.next head;struct ListNode* temp &dummyHead;while (temp->next ! NULL && temp->next->next ! NULL) {struct ListNod…...

【LeetCode热题100】【回溯】电话号码的字母组合

题目链接&#xff1a;17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 组合的过程是一个长树的过程&#xff0c;可以用深度遍历实现&#xff0c;每一个数字对应的字符串都是一层&#xff0c;一种字母组合就是一条路径&#xff0c;当递归的深度达到层数就找到了…...

解析mysql的DDL语句生成高斯内表及表字段主键配置

mysql的DDL语句如下: CREATE TABLE gg_zr (id bigint(20) NOT NULL COMMENT 责任信息表主键id,zrdm varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 责任代码,zrmc varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAU…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...