android 调出键盘表情_Android高仿微信表情输入与键盘输入详解
使用到表情与键盘的切换输入,需要多表情的只需要实现自己的表情fragment界面,然后根据工厂类获取即可,上图看效果:
效果还不错吧,哈哈。下面开始介绍:
本篇主要分析的核心类EmotionKeyboard.Java,EmotionComplateFragment.java,EmotionMainFragment.java,FragmentFactory.java,还有一个是工具类里的EmotionUtils.java和GlobalOnItemClickManagerUtils.java
这几个类我会重点分析一下,其他的大家自行看源码哈。下面就开始咯,先来看看本篇主要内容以及大概思路:
1.解决表情与键盘切换跳闪问题
1.1跳闪问题概述
为了让大家对这个问题有一定了解,我先来个简单案例,用红色面板代表表情面板,效果如下:
图(1-1)
我们先来看图(1-1),即上图,通过上图我们可以看出,当表情显示时,我们点击表情按钮,隐藏表情显示软件盘时,内容Bar有一个明显的先向下后恢复的跳闪现象,这样用户体验相当的差,我们希望的是下图(1-2)的效果,无论怎么切换都不会有跳闪现象,这就是我所有说的键盘与表情切换的跳闪问题。
图(1-2)
到这里,我们对这个问题有了大概了解后,再来深入分析如何实现图(1-2)的不跳闪效果。这里我们做个约定,我们把含有表情那个bar统称为内容Bar。
1.2
解决跳闪问题的思路:
Android系统在弹出软键盘时,会把我们的内容 Bar
顶上去,因此只有表情面板的高度与软键盘弹出时高度一致时,才有可能然切换时高度过渡更自然,所以我们必须计算出软键盘的高度并设置给表情面板。仅仅有这一步跳闪问题还是依旧存在,因此这时我们必须想其他办法固定内容Bar,因为所有的跳闪都是表情面板隐藏,而软键盘往上托出瞬间,Activity高度变高(为什么会变高后面会说明),内容Bar往下滑后,又被软键盘顶回原来位置造成的。因此只要固定了内容Bar的位置,闪跳问题就迎刃而解了。那么如何固定内容Bar的位置呢?我们知道在一个布局中一个控件的位置其实是由它上面所有控件的高度决定的,如果其上面其他控件的高度不变,那么当前控件的高度自然也不会变化,即使到时Activity的高度发生了变化也也不会影响该控件的位置(整个界面的显示是挂载在window窗体上的,而非Activity,不了解的可以先研究一下窗体的创建过程),因此我们只要在软键盘弹出前固定内容Bar上面所有控件高度,从而达到固定内容Bar位置(高度)的目的。好了,有思路了,我们接下来一步步按上面思路解决问题。
1.3
解决跳闪问题的套路:
1.3.1 先获取键盘高度,并设置表情面板的高度为软键盘的高度
Android系统在界面上弹出软键盘时会将整个Activity的高度压缩,此时windowSoftInputMode属性设置为adjustResize(对windowSoftInputMode不清楚的话,请自行查阅相关资料哈),这个属性表示Activity的主窗口总是会被调整大小,从而保证软键盘显示空间。在这种情况下我们可以通过以下方法计算软键盘的高度:
Rect r = new Rect();
mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
//获取屏幕的高度
int screenHeight = mActivity.getWindow().getDecorView().getRootView().getHeight();
//计算软件盘的高度
int softInputHeight = screenHeight - r.bottom;
这里我们队对r.bottom和mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r)进行简单解释,直接上图吧:
这下就清晰了吧,右边是Rect参数解析图,辅助我们对rect的理解。
Rect r = new Rect();
mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r)
这两句其实将左图中蓝色边框(
其实也就是actvity的大小)的size大小参数封装到Rect中,以便我们后续使用。虽然计算出来的区域大小不包含状态栏,但是r.bottom(红色箭头长度)的大小是从屏幕顶部开始计算的所以包含了状态栏的高度。需要注意的是,区域大小是这样计算出来的:
区域的高:r.bottom-r.top
区域的宽:r.right-r.left
当然这个跟计算软键盘高度没关系,只是顺带提一下。因此我们可以通过即可获取到软以下方式获取键盘高度:
键盘高度=屏幕高度-r.bottom
1.3.2 固定内容Bar的高度,解决闪跳问题
软键盘高度解决后,现在剩下的问题关键就在于控制内容Bar的高度了,那么如何做呢?我们先来看一个布局文件
android 调出键盘表情_Android高仿微信表情输入与键盘输入详解相关推荐
- android 调出键盘表情_android高仿微信表情输入与键盘输入代码(详细实现分析)
表情与键盘的切换输入大部分IM都会需要到,之前自己实现了一个,还是存在些缺陷,比如说键盘与表情切换时出现跳闪问题,这个困扰了我些时间,不过所幸在Github(其代码整体结构很不错)并且在论坛上找些解决 ...
- java使用微信表情代码_iOS高仿微信表情输入功能代码分享
最近项目需求,要实现一个类似微信的的表情输入,于是把微信的表情扒拉出来,实现了一把.可以从这里下载源码.看起来表情输入没有多少东西,不外乎就是用NSTextAttachment来实现图文混排,结果在实 ...
- Android ActionBar应用实战,高仿微信主界面的设计
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/26365683 经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对 ...
- android高仿微信表情输入与键盘输入详解-解决跳闪与表情切换问题
最近公司在项目上要使用到表情与键盘的切换输入,自己实现了一个,还是存在些缺陷,比如说键盘与表情切换时出现跳闪问题,这个相当困扰我,不过所幸在Github(其中一个不错的开源项目是https://git ...
- android高仿微信表情输入与键盘输入详解
转载请注明出处: http://blog.csdn.net/javazejian/article/details/52126391 最近公司在项目上要使用到表情与键盘的切换输入,自己实现了一个,还 ...
- android高仿微信表情输入与键盘输入(详细实现分析)
转载请注明出处(请尊重原创!谢谢~): http://blog.csdn.net/javazejian/article/details/52126391 出自[zejian的博客] 表情与键盘的切 ...
- (转)Android高仿微信表情输入与键盘输入(详细实现分析)
原地址:http://blog.csdn.net/javazejian/article/details/52126391 转载请注明出处(请尊重原创!谢谢~): http://blog.csdn.n ...
- android 上下滚动文字_android高仿今日头条富文本编辑(发布文章)
前言 在经历了几个月的项目期限.我们遇到了前端发布文章,要用到富文本编辑的功能.在一番衡量下最终用到了[richeditor-android](https://github.com/wasabeef/ ...
- android xml msgid,Android挂逼修练之行–微信聊天消息修改器插件开发详解
一.插件开发背景 昨天无意中在刷抖音的时候看到有个视频可以修改转账信息,我就觉得好奇所以就自己实现了一下,关于微信消息修改其实是个假象就是修改本地自己看到的消息,而不是真正意义上的把聊天信息修改了,但 ...
最新文章
- Ceylon语言加入Eclipse基金会
- java8为什么用不了_为什么不建议使用Date,而是使用Java8新的时间和日期API?
- 安全 - MySQL 出现严重的密码安全漏洞,许多系统存在风险
- 方向键 上下左右的转译
- CNCF 2019 年度报告重磅发布 | 云原生生态周报 Vol. 41
- 老男孩博客园杨海潮MySQL--MySQL机构逻辑2
- scrapy常用工具备忘
- java生成折线图,饼状图,柱形图
- 在创投界有个公开的秘密
- OCR方向目前最火的repo,绝绝子!
- 算法:间隔重排序链表Reorder List
- 用这个玩吃鸡:宏按键加一键恢复加自由移动视角,你想要的功能它都有
- Word设置默认粘贴格式,自动更改粘贴格式
- 专访美团外卖曹振团:天下武功唯快不破
- 逸鹏说道:性格色彩读后感
- 信号完整性(SI)电源完整性(PI)学习笔记(二十)传输线的串扰(四)
- 功能模块图、业务流程图、处理流程图、ER图,数据库表图(概念模型和物理模型)画法...
- 麒麟v10 sp1 桌面系统分辨率调整
- 北工大电子与通信工程复试c语言,北京工业大学专硕考研复试经验
- GITC2016北京站——打造技术狂欢盛宴
热门文章
- 计算机中imb二进制数,计算机基础知识总述.doc
- 【自我总结】文献调研的思路及方法
- 为何农历10月1号要祭祖上坟?原来有这么多讲究,你知道吗?
- python随机抽号_使用python随机抽取评论roll枪
- xcode Unable to install xxx
- Tomcat与JDK版本对应关系,Tomcat各版本特性,鸟哥linux视频教程
- Mysql IFNULL SUM 结合使用无效的问题
- 微信小程序 - 自定义组件中类似页面 onShow 的页面显示就触发的生命周期钩子函数(页面回退时更新数据常用, 例如回退页面更新子组件数据, 回退更新子组件中 data 内容)
- 10个方法教你解决虚幻4运行崩溃问题
- 微信公众号排查“该公众号提供的服务出现故障,请稍后再试”问题