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

 

   
   
   
   
  1. Java 代码复制内容到剪贴板  
  2.       
  3. textView.setText(Html.fromHtml(""));     

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

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

 

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

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

 

   
   
   
   
  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 p_w_picpathName = "";          
  13.             List list = BlogHomeActivity.emotions;          
  14.             for (Emotions emotions : list) {          
  15.                 if (emotions.getPhrase().equals(phrase)) {          
  16.                     p_w_picpathName = emotions.getImageName();          
  17.                 }          
  18.             }          
  19.                       
  20.             try {          
  21.                 Field f = (Field)R.drawable.class.getDeclaredField(p_w_picpathName);          
  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);