Android TextView、EditText显示表情

简介:

要想在TextView和EditText中显示表情有多种方法。Android提供了Html.fromHtml()方法来解析Html标签,如:

 

 
  1. Java 代码复制内容到剪贴板  
  2.       
  3. textView.setText(Html.fromHtml("<img src=\"http://06peng...pg\" />"));     

用这种方式显示表情图片的话,会出现一个蓝色的小方框,而无法显示真正的表情。

另一种显示方法就是Android提供的

 

 
  1. Java 代码复制内容到剪贴板  
  2.       
  3. Html.fromHtml(source, imageGetter, tagHandler)    

tagHandler没有用到,直接为null即可。在这里我们实现imageGetter:

 

 
  1. Java 代码复制内容到剪贴板  
  2.       
  3. public static ImageGetter imgGetter = new Html.ImageGetter() {          
  4.         public Drawable getDrawable(final String source) {          
  5.             new Thread(){        
  6.                 public void run(){        
  7.                     try {          
  8.                         url = new URL(source);          
  9.                         drawable = Drawable.createFromStream(url.openStream(), "");          
  10.                     } catch (Exception e) {          
  11.                         e.printStackTrace();        
  12.                     }          
  13.                     drawable.setBounds(00, drawable.getIntrinsicWidth(), drawable          
  14.                             .getIntrinsicHeight());         
  15.                 }        
  16.             }.start();        
  17.                      
  18.             return drawable;          
  19.         }          
  20.     };      

用这种方法的缺陷就是非常耗网络资源。特别是当图片很多的事情不可取。

另一种方法就是将表情存到本地中,TextView通过替换编码来显示表情。TextView通过替换编码来显示表情。

例如【嘻嘻】,找到这样的字符串则去本地文件夹中寻找对应的图片并显示。

 

 
  1. Java 代码复制内容到剪贴板  
  2.       
  3. SpannableString ss = new SpannableString(content);         
  4.     int len = 0;          
  5.     int starts = 0;          
  6.     int end = 0;          
  7.     while(len < content.length()){          
  8.         if(content.indexOf("[", starts) != -1 && content.indexOf("]", end) != -1){          
  9.             starts = content.indexOf("[", starts);          
  10.             end = content.indexOf("]", end);          
  11.             String phrase = content.substring(starts,end + 1);          
  12.             String imageName = "";          
  13.             List<Emotions> list = BlogHomeActivity.emotions;          
  14.             for (Emotions emotions : list) {          
  15.                 if (emotions.getPhrase().equals(phrase)) {          
  16.                     imageName = emotions.getImageName();          
  17.                 }          
  18.             }          
  19.                       
  20.             try {          
  21.                 Field f = (Field)R.drawable.class.getDeclaredField(imageName);          
  22.                 int i= f.getInt(R.drawable.class);          
  23.                 Drawable drawable = activity.getResources().getDrawable(i);            
  24.                 if (drawable != null) {          
  25.                     drawable.setBounds(00, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());           
  26.                     ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);            
  27.                     ss.setSpan(span, starts,end + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);            
  28.                 }          
  29.             } catch (SecurityException e) {          
  30.                 e.printStackTrace();          
  31.             } catch (NoSuchFieldException e) {          
  32.                 e.printStackTrace();          
  33.             } catch (IllegalArgumentException e) {          
  34.                 e.printStackTrace();          
  35.             } catch (IllegalAccessException e) {          
  36.                           
  37.             }          
  38.             starts = end;          
  39.             len = end;          
  40.             end++;          
  41.         }else{          
  42.             starts++;          
  43.             end++;          
  44.             len = end;          
  45.         }          
  46.     }          
  47.               
  48.     textView.setText(ss);   

 



     本文转自06peng 51CTO博客,原文链接:http://blog.51cto.com/06peng/962491,如需转载请自行联系原作者


相关文章
|
5月前
|
XML 监控 Android开发
Android Studio App开发入门之文本输入EditText的讲解及使用(附源码 包括编辑框、焦点变更监听器、文本变化监听器 )
Android Studio App开发入门之文本输入EditText的讲解及使用(附源码 包括编辑框、焦点变更监听器、文本变化监听器 )
269 0
|
13天前
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
12 0
|
1月前
|
Android开发
Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果
本文介绍了 `SpannableString` 在 Android 开发中的强大功能,包括如何在单个字符串中应用多种样式,如颜色、字体大小、风格等,并提供了详细代码示例,展示如何设置文本颜色、添加点击事件等,助你实现丰富文本效果。
152 3
|
4月前
|
XML Java Android开发
14. 【Android教程】文本输入框 EditText
14. 【Android教程】文本输入框 EditText
484 2
|
4月前
|
XML IDE 开发工具
13. 【Android教程】文本框 TextView
13. 【Android教程】文本框 TextView
90 2
|
4月前
|
编解码 Android开发
Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
65 0
|
5月前
|
Android开发
android TextView HTML 的效果
android TextView HTML 的效果
36 2
|
5月前
|
XML 搜索推荐 Java
Android TextView的字体设置
【5月更文挑战第13天】
210 0
|
5月前
|
XML Java Android开发
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
602 1
|
5月前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
95 0