表情为本地表情,把所有的表情图片装载到gridview里面。然后在gridview的点击事件里做如下处理。

@Override

public void onItemClick(AdapterView> arg0, View arg1, int index, long arg3) {

if(mEditText == null) return;

String content = mEditText.getText().toString().trim() + emotionNames[index];

if(TextUtils.isEmpty(content)) return;

Log.d(TAG, "SinaEmotionView: content = " + content);

boolean isLeft = true;//应该出现哪一边的括号

List leftBracketAt = new ArrayList();

List rightBracketAt = new ArrayList();

char[] c_content = content.toCharArray();

for(int i = 0; i < c_content.length; i++){

if('[' == c_content[i]){

//Log.d(TAG, "left ------- " + i);

if(!isLeft){//如果不该出现左括号时,出现了。则覆盖上一个。

leftBracketAt.remove(leftBracketAt.size() - 1);

}

leftBracketAt.add(new Integer(i));

isLeft = false;

}else if(']' == c_content[i]){

//Log.d(TAG, "right ------- " + i);

if(isLeft){

rightBracketAt.remove(leftBracketAt.size() - 1);

}

rightBracketAt.add(new Integer(i));

isLeft = true;

}

}

SpannableString spannable = new SpannableString(content);

//获得左右[]位置链表长度小的链表的长度//因为用户也有可能输入"[" 或者 "]"

int miniSize = leftBracketAt.size() <= rightBracketAt.size() ? leftBracketAt.size() : rightBracketAt.size();

for(int j = 0; j < miniSize; j++){

int leftAt = leftBracketAt.get(j);

int rightAt = rightBracketAt.get(j) + 1;

while(leftAt >= rightAt){

rightBracketAt.remove(j);

rightAt = rightBracketAt.get(j);

//Log.d(TAG, "while ---- ");

}

String name = content.substring(leftAt, rightAt);

//Log.d(TAG, "name ---- " + name + ".");

//查询name是不是表情的name

int pos = emotionNamePos(name);

if(-1 != pos){

//把文字替换成图片来显示

Drawable drawable = getResources().getDrawable(emotionIconIds[pos]);

drawable.setBounds(0, 10, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()+10);

ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);

spannable.setSpan(span, leftAt, rightAt, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

}

}

mEditText.setText(spannable);

//设置光标位置到最后

mEditText.requestFocus();

mEditText.setSelection(content.length());

}

其中,

mEditText是要显示表情及微博文本内容的EditText控件

emotionIconIds是表情图片id的int型数组

emotionNames是表情对应的文字(如,"[哈哈]")的一个字符串数组

/**

* 查询一个字符串是不是一个表情的名字,

* 如果是,则返回位置,如果不是则返回-1;

* @param name

* @return

*/

private int emotionNamePos(String name){

if(name == null) return -1;

for(int i = 0; i < emotionNames.length; i++){

if(name.equals(emotionNames[i])) return i;

}

return -1;

}

android中表情功能实现,android sina 微博表情功能的实现相关推荐

  1. android中注册的账号密码储存在,Android中使用SharedPreferences完成记住账号密码的功能...

    效果图: 记住密码后,再次登录就会出现账号密码,否则没有. 分析: SharedPreferences可将数据存储到本地的配置文件中 SharedPreferences会记录CheckBox的状态,如 ...

  2. android开发 转跳功能,如何在Android中利用Intent实现一个页面跳转功能

    如何在Android中利用Intent实现一个页面跳转功能 发布时间:2021-02-20 17:06:31 来源:亿速云 阅读:113 作者:Leah 本篇文章为大家展示了如何在Android中利用 ...

  3. android计算器功能实现,在android中利用 studio实现一个简单的计算器功能

    在android中利用 studio实现一个简单的计算器功能 发布时间:2020-11-07 15:35:20 来源:亿速云 阅读:168 作者:Leah 这篇文章将为大家详细讲解有关在android ...

  4. 基于Android的sina微博分享功能

    该功能是在基于Android的应用中实现sina微博分享,利用sina微博这个平台来推广自己的应用,大家有兴趣可以看看新浪微博开发平台的相关介绍http://open.weibo.com/ 运行结果: ...

  5. android中bmob云存储,Android中的Bmob移动后端云服务器功能

    PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己用servlet作为服务端来实现过滤没有注册过的用户,但是太麻烦,而且不是随时都可以用的.这里介绍一个移动后端云服 ...

  6. Android中使用自带TextToSpeech实现离线语音合成功能

    场景 需要实现在安卓端将一段文字进行语音合成并播报. 此过程可离线不需要网络,不用借助第三方形如科大讯飞或者百度等语音合成SDK或者相关工具等. 注: 博客: https://blog.csdn.ne ...

  7. Android中通过ImageSwitcher实现相册滑动查看照片功能(附代码下载)

    场景 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将需要滚动查看的 ...

  8. 【译】Android中的安全数据— Android中的加密(第2部分)

    目录 锁屏 选择一个钥匙 密钥存储 密钥生成 密钥管理 加密与解密 使用范例 下一步是什么 安全提示 锁屏 如果要保护数据,请保护设备. 为了更加安全,在提供对任何应用程序功能的访问权限之前,我们可以 ...

  9. 【译】Android中的安全数据— Android中的加密(第1部分)

    目录 Java密码体系结构 Android Key Store 样例项目 下一步是什么 安全提示 Java密码体系结构 Android建立在Java密码体系结构(JCA)的基础上,该体系结构提供了用于 ...

  10. android中录音断点播放,Android实现暂停--继续录音(AudioRecord)

    Android提供了两个API用于录音的实现:MediaRecorder 和 AudioRecord,各有优劣. 1.MediaRecorder 已经集成了录音.编码.压缩等,支持少量的录音音频格式, ...

最新文章

  1. 在web项目中发布jaxws
  2. [渝粤教育] 中国地质大学 Windows程序设计 复习题 (2)
  3. CString LPCTSTR LPTSTR 类型的相互转化
  4. 6点叫醒全员的腾讯是枕戈待旦,还是如李彦宏说的“新瓶装旧酒”
  5. FFmpeg的H.264解码器源代码简单分析
  6. 串行通信:常见的串行通信接口协议UART、SPI、I2C简介
  7. 业余ACMer笔记·6月第三周补题
  8. 超声广义相干因子( Generalized Coherence Factor,GCF)波束合成仿真
  9. serv-u 用户使用sftp登录 时间显示不对_宜家中国电商化之路步履蹒跚 或因忽视消费者的使用习惯...
  10. WTL for MFC Programmers, Part VI - Hosting ActiveX Controls
  11. 数组基础与字符串(尚学堂视频学习总结_004)
  12. 数学在计算机方面的应用论文参考文献,数学论文参考文献
  13. RigNet神经网络模型自动绑定骨骼
  14. UE4VR学习笔记3
  15. sql server 数据库中null 转换为 0
  16. windows 下安装软件乱码
  17. redis 空格问题
  18. docker安装postgis
  19. 基于Spark实现电影点评系统用户行为分析—DataFrame篇(二)
  20. 适合问卷收益的10个精品项目

热门文章

  1. js 使用Rsa 加密 解密
  2. ATP-EMTP谁懂啊,急!!
  3. 三大有限元分析软件(ABAQUS、ANSYS、MSC)的优缺点是什么?应如何选择?
  4. 通话话单分析 java,奇兵手机话单分析系统功能简介
  5. 程序员基础(自学)适合入门,大一
  6. LeNet网络分类MINST数据集,附详细代码及注解和B站视频讲解
  7. ztree管理html元素,zTree入坑指南
  8. selenium自动化看网课
  9. 开源阅读书源_阅读——开源阅读软件
  10. 漫画微信小程序源码 全开源 商业版