要想在TextView和EditText中显示表情有多种方法。Android提供了Html.fromHtml()方法来解析Html标签,如:
- Java 代码复制内容到剪贴板
- textView.setText(Html.fromHtml("<img src=\"http://06peng...pg\" />"));
用这种方式显示表情图片的话,会出现一个蓝色的小方框,而无法显示真正的表情。
另一种显示方法就是Android提供的
- Java 代码复制内容到剪贴板
- Html.fromHtml(source, imageGetter, tagHandler)
tagHandler没有用到,直接为null即可。在这里我们实现imageGetter:
- Java 代码复制内容到剪贴板
- public static ImageGetter imgGetter = new Html.ImageGetter() {
- public Drawable getDrawable(final String source) {
- new Thread(){
- public void run(){
- try {
- url = new URL(source);
- drawable = Drawable.createFromStream(url.openStream(), "");
- } catch (Exception e) {
- e.printStackTrace();
- }
- drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable
- .getIntrinsicHeight());
- }
- }.start();
- return drawable;
- }
- };
用这种方法的缺陷就是非常耗网络资源。特别是当图片很多的事情不可取。
另一种方法就是将表情存到本地中,TextView通过替换编码来显示表情。TextView通过替换编码来显示表情。
例如【嘻嘻】,找到这样的字符串则去本地文件夹中寻找对应的图片并显示。
- Java 代码复制内容到剪贴板
- SpannableString ss = new SpannableString(content);
- int len = 0;
- int starts = 0;
- int end = 0;
- while(len < content.length()){
- if(content.indexOf("[", starts) != -1 && content.indexOf("]", end) != -1){
- starts = content.indexOf("[", starts);
- end = content.indexOf("]", end);
- String phrase = content.substring(starts,end + 1);
- String imageName = "";
- List<Emotions> list = BlogHomeActivity.emotions;
- for (Emotions emotions : list) {
- if (emotions.getPhrase().equals(phrase)) {
- imageName = emotions.getImageName();
- }
- }
- try {
- Field f = (Field)R.drawable.class.getDeclaredField(imageName);
- int i= f.getInt(R.drawable.class);
- Drawable drawable = activity.getResources().getDrawable(i);
- if (drawable != null) {
- drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
- ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
- ss.setSpan(span, starts,end + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
- }
- } catch (SecurityException e) {
- e.printStackTrace();
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- }
- starts = end;
- len = end;
- end++;
- }else{
- starts++;
- end++;
- len = end;
- }
- }
- textView.setText(ss);
本文转自06peng 51CTO博客,原文链接:http://blog.51cto.com/06peng/962491,如需转载请自行联系原作者