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,如需转载请自行联系原作者


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值