自己写了一个方法,可以让一串带有若干个表情的文字,图文并茂地显示在textView或者EditText当中。
比如从服务器端获取到一串字符串,
而客户端已经在assests文件夹当中的emoji文件夹当中有一组的表情。
String content="这就是一串文字<img src= emoji/44.png >可以显示表情,<img src= emoji/14.png >和文字。";
ChangeFacePic2TextView(content,textView);
ChangeFacePic2EditText(content,edittext);
//此方法就是对字符串进行遍历,如果含有<img src= emoji/**.png >,则用assests文件夹中的图片换成SpinnableString进行代替。
列举 ChangeFacePic2TextView 方法如下:
//将带表情的一串String 转成表情加文字显示在textView上
public static void ChangeFacePic2TextView( String str, TextView textView) {
if(str==null||"".equals(str)) {
textView.setText("");
return;
}
try{
InputStream bitmap=null;
SpannableString ss = new SpannableString(str);
Bitmap bit=null;
//处理显示表情
String content = str;
int len = 0;
int starts = 0;
int end = 0;
while(len < content.length()){
if(content.indexOf("<img src=", starts) != -1 && content.indexOf(">", end) != -1){
starts = content.indexOf("<img src=", starts);
end = content.indexOf(">", end);
String phrase = content.substring(starts,end + 1);
String face_pic_name = phrase.substring(phrase.indexOf("emoji"),phrase.indexOf(".png")+4);
try {
bitmap=MyApp.getInstance().getAssets().open(face_pic_name);
bit=BitmapFactory.decodeStream(bitmap);
根据Bitmap对象创建ImageSpan对象
// ImageSpan imageSpan=new ImageSpan(this,bit);
创建一个SpinnableString对象,以便插入ImageSpan对象封装的图像
// spannableString=new SpannableString("replace");
用ImageSpan对象替换replace字符串
// spannableString.setSpan(imageSpan, 0, 15, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//将图像显示在TextView上
} catch (IOException e) {
e.printStackTrace();
}
Drawable drawable = new BitmapDrawable(bit);
try {
if (drawable != null) {
drawable.setBounds(0, 0, 30, 30);
ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
ss.setSpan(span, starts,end + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
} catch (SecurityException e) {
e.printStackTrace();
}
starts = end;
len = end;
end++;
}else{
starts++;
end++;
len = end;
}
}
textView.setText(ss);
} catch (Exception e) {
e.printStackTrace();
}
}