Android仿微信聊天UI之处理软键盘抬升问题

article/2025/11/10 5:06:29

前言,效果图

本文介绍如何解决软键盘遮挡问题,以下是仿微信聊天界面所制作的效果图:

键盘未抬升键盘抬升

一、ViewTreeObserver

ViewTreeObserver,很明显通过名字就可以了解到它是View树的观察者。该类不能被实例化,但可以通过视图获取,比如view.getViewTreeObserver()获取。很明显该类实现了观察者模式,当一个视图树的布局发生变化时,可以被该类监听到,首先我们来看一下我们可以注册哪些监听:

  • interface ViewTreeObserver.OnGlobalFocusChangeListener
    当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类
  • interface ViewTreeObserver.OnGlobalLayoutListener
    当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类
  • interface ViewTreeObserver.OnPreDrawListener
    当一个视图树将要绘制时,所要调用的回调函数的接口类
  • interface ViewTreeObserver.OnScrollChangedListener
    当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类
  • interface ViewTreeObserver.OnTouchModeChangeListener
    当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类

二、解决软键盘遮挡问题

/*** 监听软键盘弹出*/
private void initKeyboardListener() {View decorView = getWindow().getDecorView();View contentView = findViewById(Window.ID_ANDROID_CONTENT);decorView.getViewTreeObserver().addOnGlobalLayoutListener(getGlobalLayoutListener(decorView, contentView));
}
/*** 软键盘弹出后的处理事件*/
private ViewTreeObserver.OnGlobalLayoutListener getGlobalLayoutListener(final View decorView, final View contentView) {return new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {Rect rect = new Rect();decorView.getWindowVisibleDisplayFrame(rect);int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels;// 获取键盘抬高的高度int diff = height - rect.bottom;if (diff != 0) {if (contentView.getPaddingBottom() != diff) {// 将聊天记录定位到最后一行recyclerView.scrollToPosition(messageList.size() - 1);contentView.setPadding(0, 0, 0, diff);}} else {if (contentView.getPaddingBottom() != 0) {contentView.setPadding(0, 0, 0, 0);}}}};
}

Demo对应的下载链接: Demo下载!


http://chatgpt.dhexx.cn/article/hhbS4uLO.shtml

相关文章

解决手机端微信公众号内input输入框获取焦点后,底部导航栏显示在输入法软键盘上面的问题

今天遇到在微信公众号中打开网站,input 输入框和textarea输入框获取焦点后,弹出输入法键盘,将底部的导航栏”顶到“输入法键盘上面的问题,看着非常shit! 直接上代码看效果 var clientHeight document.documentElement.clientHei…

教你在Windows自带的微软拼音输入法中用上小鹤双拼方案

微软拼音输入法是Windows 10操作系统中自带的输入法,虽然很多人在拿到一个新系统之后就安装一个新的输入法,比如搜狗输入法、手心输入法。但是很多人不知道最新版本的windows操作系统自带的微软拼音输入法,已经不像是以前windows 7操作系统的…

不甘心只做输入工具,搜狗输入法上线AI助手,提供智能服务

8月19日搜狗输入法上线了新功能——智能汪仔,在输入法中引入了AI助手,这是搜狗输入法继今年5月推出“语音变声功能”后又一个AI落地产品。 有了智能汪仔AI助手的加持后,搜狗输入法能够在不同的聊天场景,提供丰富多样的表达方式从…

524MB的微信输入法:没广告 你会用吗

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇 来源丨 扩展迷EXTFANS https://mp.weixin.qq.com/s/asRqVjbn0lf8BmDnGY9Zig 相信很多小伙伴都有过这样的经历:和朋友聊天讨论某件东西,打开其…

Android之仿微信QQ聊天顶起输入法不顶起标题栏

在这记录一下输入法弹出的一系列问题,有的输入法弹出就把整个布局弹上去,有的输入法弹出布局不会有变化,有的输入法弹出遮盖输入框等等问题,网上也有很多说加着加那的,但是看一下都不是很完整,解决不了所有…

刚才发现微软拼音-简洁2010是目前比较适合程序员的输入法

微软拼音-简洁2010,在中文状态下,按 //,打出来就是 // 可是 百度输入法,QQ输入法、搜狗输入法 在中文状态下,按 //,打出来的都是 、、 这样写注释就麻烦了,还得切换成英文状态。 微软拼音-新体…

Qt5软键盘实现中文拼音输入法

一、序 基于Qt实现的虚拟键盘实现输入法在网上所有资料看来,几乎都是基于生成的中文汉字数据库实现的方法,不够灵活,不够智能。 二、实现 1、拼音输入法的库 我们采用的安卓底层的谷歌拼音输入法,在Qt5.7之后,Qt官方…

实现ucGUI界面中的拼音汉字输入法(T9)

实现ucGUI界面中的汉字输入法 ucGUI版本:3.94 上个图片 代码下载地址: http://download.csdn.net/detail/jhting/7034669 很久了,可能直接编译不过,不过你了解的话,小小改动就OK了 码表是在网上找到的. 主要三个…

微信小程序实现调用百度文心一言接口API(可直接运行代码)

1、首先得获得你自己的API_key 先进入文心千帆大模型平台,然后点击左边一列的“应用接入”,然后点创建应用,这时你就获得了API_key了。 2、第二部就直接上这段代码就ok,不过记得要换成自己的API_key和Secret_key。 Page({onLoad:…

python客户端实现利用第三方smtp发邮件

上面采用的是qq邮箱,需要登录qq邮箱打开pop3 参考资料1(20条消息) Python使用SMTP协议实现邮件发送(含明文/SSL加密/TLS加密)_dev_zyx的博客-CSDN博客 参考资料2(20条消息) python实现smtp协议发送邮件_Clarence-CSDN博客

福音:IDEA、VSCODE神级插件Bito

文章目录 Bito是什么?IDEA环境安装注册使用 VSCODE环境疑难问题后叙 Bito是什么? Bito是一款在编程软件中使用的插件,由ChatGPT团队开发,它是ChatGPT团队为了提高开发效率而开发的一款工具。 Bito的AI帮助开发人员极大地提高了其…

一加3t android6.0,业界最良心!一加3/3T官方确认升级Android O

与苹果手机的iOS不同,搭载安卓系统的手机就比较悲催。因为升级速度总是慢半拍,甚至停滞不前。继HTC U11,另一款手机也确认将会升级Android O,它就是来自中国的一加手机3/3T。 今天,一加手机创始人兼CEO刘作虎在个人推特…

【Tanh的标量实现】

cmath 文章目录 计算机是如何实现tanh计算的一、tanh的一些基本内容二、代码1.我的实现例子2.代码中分段函数的实现原理 补充 计算机是如何实现tanh计算的 一、tanh的一些基本内容 对于tanh函数有公式为 t a n h ( x ) ( e x − e − x ) / ( e x e − x ) tanh(x) (e^{x}…

LeetCode-加一(Plus One解题思路)

题目: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 来源:力扣&#xff…

学计算机的 1加1,如何用“一加一等于几”解析人生

一加一等于二。 这个亘古不变的结论,一直以来被人们用各种各样的推理来诠释成千变万化的结果,一加一等于二,不再是唯一的结论,而每一个延伸的结果都伴随着一个个的充满睿智的推理。一加一到底等于几呢?好像我们越来越迷…

一加一为什么等于二

中国数学家陈景润研究的“11”并非算术的11,许多人也误以为陈景润在研究11为什么等于2,算法是人类定义的,不需要研究。陈景润研究的“11”其实是哥德巴赫猜想的代名词。 数学上,非常有名的“(11)”&#x…

1分钟自动产出高质量PPT:ChatGPT + MidShow

你可能想知道如何在一分钟内自动产出高质量的PPT。有了ChatGPT和MindShow,这不再是一个难题。ChatGPT是一个基于OpenAI的强大的自然语言生成模型,它可以根据你的输入生成各种类型的文本,包括PPT提纲。MindShow是一个在线的PPT制作工具&#x…

ChatGPT AI 快速制作财务汇报PPT

在职场中从事财务工作汇报一般都包含以下内容: 收入报表:收入来源、金额、时间等。支出报表:支出项目、金额、时间等。现金流量表:描述企业现金流量的变动情况,包括现金流入、流出和净流量。利润和损失报表&#xff1…

牛津英语字典pdf下载_英语词典 | 5本图解词典,让你拥有英语思维,一图胜千言!...

本篇微信主要包括如下内容: 1、DK汉英双语图解字典(PDF版) 2、新牛津图解词典The New Oxford Picture Dictionary(PDF版) 3、Word by Word Picture Dictionary(PDF+MP3音频版) 4、朗文汉英中华文化图解词典(PDF版) 5、APP(五种语言图解词典,JPG版) 小库需要提醒各位同学: ①资…

chatgpt赋能python:Python诞生于1991年–一个值得庆祝的编程语言!

Python诞生于1991年 – 一个值得庆祝的编程语言! Python作为一种非常流行的编程语言,已经成为许多技术公司和个人在各种领域的首选语言。 Python在最新的TIOBE编程语言排名中位列前三,这证明了其在编程世界的重要性。但是,Python…