您的位置:首页 > 移动开发 > Android开发

Android TextView、EditText显示表情 推荐

2011-11-04 00:00 681 查看
要想在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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐