android 调出键盘表情_Android-表情键盘的制作
IM 应用中必不可少的就是表情键盘,最近研究了一下,发现表情键盘还是蛮容易做的。
布局
布局文件主要有两个文件了,一个是要放在聊天对话框里的 ViewPager,一个是给 ViewPager 添加的 View。
很明显 ViewPager 是放在聊天布局的最底部,并且 visibility="gone",当点击表情按钮的时候使 visibility="visible"。这个布局里我是把高度给写死了,因为如果不写死的话,在代码中好像布局会出现问题?在网上也看到大多数的人都是给写死的,当然也可以用 onGlobalLayout 的监听去动态配置尺寸。
第 2 个布局就是 ViewPager 中的 View,这里我使用 GridView,并设置 column=7。
配置 ViewPager 中的 View
搞好布局接下来就是 ViewPager 中的 View 了。毫无疑问,一个是 ViewPagerAdapter,一个是 GridViewAdapter,大体思路就是:计算表情包中的表情需要几个 page,分好之后对 GridView 实例进行加载数据,然后把一个一个 gridview 加载到 ViewPager 中去。
首先看看计算表情各种属性的代码,我放在 EmotionHelper 类中:
int pages=emojiCodes.length/ONE_PAGE_SIZE+(emojiCodes.length%ONE_PAGE_SIZE==0? 0:1);
for(int i=0;i
List onePageEmojis = new ArrayList<>();
int start=i*ONE_PAGE_SIZE;
int end=start+Math.min(ONE_PAGE_SIZE,emojiCodes.length-start);
for(int j=start;j
onePageEmojis.add(emojiCodes[j]);
}
emogroups.add(onePageEmojis);
}
emojiCodes 是表情相对应的字符串,page 是得到表情的页数,emogroups 是多个 page 的数组列表。这里已经完成了表情框各个数据的初始化了,接下来就是在 adapter 中利用字符串查找到对应的表情图片,完成加载。
ImageView 在 TextView 中的显示问题
最开始这个还想了我好一会,要在 TextView 中显示 ImageView 该怎么做?后来还上网找到了一个 Spannable 的东西,看英文解释就是可以把类似于 ImageView 的东西 attach 到 TextView 上吧。看代码如何生成可以显示 ImageView 的 SpannableString 吧:
public static CharSequence replace(Context context, String text) {
if (TextUtils.isEmpty(text)) {
return text;
}
SpannableString spannableString = new SpannableString(text);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String factText = matcher.group();
String key = factText.substring(1, factText.length() - 1);
if (contain(emojiCodes, factText)) {
Bitmap bitmap = getDrawableBitmap(context, key);
ImageSpan image = new ImageSpan(context, bitmap);
int start = matcher.start();
int end = matcher.end();
spannableString.setSpan(image, start, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return spannableString;
}
这里还了解了一下Pattern和matcher的知识,例如我这里的表情格式是这样的:":clap:",对应的pattern就是
`pattern = Pattern.compile("\\:[a-z]*\\:");`
pattern.matcher就是基于text,利用这个pattern去寻找匹配字符串,faceText就是得到的表情对应的字符串值,之后将对应的bitmap初始化为ImageSpan放入spannableString中去。
表情键盘做好之后,和软键盘的冲突没有很好的协调,下次有机会再好好研究吧。
android 调出键盘表情_Android-表情键盘的制作相关推荐
- android 调出键盘表情_Android 软键盘和emoji表情切换方案,和微信几乎一样的体验...
注意:本项目还有一个小坑.第一次进去的时候有时候输入框没有得到焦点,没有弹出软键盘,所以不能更好的量取软键盘高度,给了一个默认值787 软键盘默认高度.所以可以忽略不计,一旦弹出了软键盘,这个高度就被 ...
- edittext 软键盘上方_Android 软键盘的全面解析,让你不再怕控件被遮盖
原标题:Android 软键盘的全面解析,让你不再怕控件被遮盖 作者 | Vander丶 编辑 | 苏宓 微信公众号 | mobilehub 背景 Android软键盘这块从我入职到现在,是一个一直纠 ...
- android 调出键盘表情_android 表情,软键盘冲突解决方案(仿微博等SNS应用)
之前总想搞一下这个模块,可是由于忙碌总是推迟,现在就把这块好好的弥补过来,下面是我实现的思路.本人才疏学浅,还望大家不要见笑. 首先我们还是先看写示例: 上面应用应该不用我过多介绍,下面我简单介绍下我 ...
- android 分区修改工具_Android刷机包制作工具与教程-大神必备
第一期---技术资料工具(大神必备版): 更新日志: 1.书籍-Android系统级深入开发--移植与调试 2.开发工具-Android-Kitchen 3.boot解包打包修改工具 4.adb-fa ...
- android 调出键盘表情_Android高仿微信表情输入与键盘输入详解
使用到表情与键盘的切换输入,需要多表情的只需要实现自己的表情fragment界面,然后根据工厂类获取即可,上图看效果: 效果还不错吧,哈哈.下面开始介绍: 本篇主要分析的核心类EmotionKeybo ...
- android 调出键盘表情_android高仿微信表情输入与键盘输入代码(详细实现分析)
表情与键盘的切换输入大部分IM都会需要到,之前自己实现了一个,还是存在些缺陷,比如说键盘与表情切换时出现跳闪问题,这个困扰了我些时间,不过所幸在Github(其代码整体结构很不错)并且在论坛上找些解决 ...
- 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 ...
最新文章
- redux 入门到实践
- 正则提取字符串-python
- Oracle asm aix盘,AIX/HP UX/LINUX上ORACLE ASM添加磁盘
- import java.util_importjava.util.*;classKeyMaster{publi..._考试资料网
- Q1 SpringBoot启动类如何作为配置类注册进Spring容器的?(ok)
- Futter基础第2篇: 实现文本、容器【Text、Container】
- C#WinForm开发在选项卡tab中集成加载多个窗体,通过选项卡切换窗体(超详细讲解)
- Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx
- JVM内存模型(通俗易懂)
- ttl备份机顶盒固件_电信盒子华丽变身全网通盒子,电视免费看,备份固件方法详解...
- Maven系列(一) — Nexus 下载及配置
- C# 注册dll的两种方式
- get和post区别
- nginx配置https后报错nginx: [emerg] https protocol requires SSL support in XXX.conf详细解决方法
- Aligning Domain-Specific Distribution and Classifier for Cross-Domain Classification from Multiple
- 如何使用 IFTTT 零成本建立网站内容监控系统?
- ORB_SLAM2系列之三:ORB_SLAM2跑RGBD SLAM数据集
- 完美解决cannot import name ‘_validate_lengths‘ from ‘numpy.lib.arraypad‘错误
- 人工智能在重要研究中,主要有哪些突出应用?
- 图的一些基本知识:图,邻居,度矩阵,邻接矩阵
热门文章
- 体育会项目查询程序C语言,中考资讯:各地区2021年中考体育会取消吗
- 【CNN】——涨点模块SE,CBAM,CA对比
- 无人机视觉检测算法研究及数据集汇总
- 小红帽 oracle,Linux+5+红帽子企业版安装Oracle9
- leetcode 1175. Prime Arrangements(python)
- android格式化SD卡,获取其它程序的缓存大小,清理数据
- 2021年C/C++Linux服务器开发/后台架构师知识体系整理(持续更新中)
- You are the reason I am
- powereshell判断目录如果存在pdf文件则打包文件发送到指定邮箱
- Ubuntu18.04系统下装CUDA9.0