这里显示表情的思路是,先把表情准备到本地中,给表情添加一个bean,TextView通过替换编码来显示表情。
例如【嘻嘻】,找到这样的字符串则去本地文件夹中寻找对应的图片并显示。
package com.uim.microblog.util;
import java.lang.reflect.Field;
import java.util.List;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ImageSpan;
import android.text.style.URLSpan;
import android.util.Log;
import android.widget.TextView;
import com.uim.R;
import com.uim.microblog.model.Emotions;
import com.uim.microblog.ui.BlogHomeActivity;
/**
* 处理TextView界面的类
* @author mzba
* @version 2011-06-23
*
*/
public class TextAutoLink {
// 加入话题 好友 URL的连结
public static char strarray[];
public static void addURLSpan(Activity activity, String str, TextView textView) {
try{
SpannableString ss = new SpannableString(str);
strarray = str.toCharArray();
int l = str.length() - 10;
for (int i = 0; i < l; i++) {
if (strarray[i] == 'h' && strarray[i + 1] == 't'
&& strarray[i + 2] == 't' && strarray[i + 3] == 'p'
&& strarray[i + 4] == ':' && strarray[i + 5] == '/'
&& strarray[i + 6] == '/') {
StringBuffer sb = new StringBuffer("http://");
for (int j = i + 7; true; j++) {
if (strarray[j] != ' ')
sb.append(strarray[j]);
else {
Log.d("http", sb.toString());
ss.setSpan(new URLSpan(sb.toString()), i, j,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
i = j;
break;
}
}
}
}
// 处理话题
l = str.length();
StringBuffer sb = null;
boolean start = false;
int startIndex = 0;
for (int i = 0; i < l; i++) {
if (strarray[i] == '@') {
start = true;
sb = new StringBuffer("weibo://weibo.view/");
startIndex = i;
} else {
if (start) {
if (strarray[i] == ':') {
ss.setSpan(new URLSpan(sb.toString()), startIndex, i,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sb = null;
start = false;
} else {
sb.append(strarray[i]);
}
}
}
}
// 处理 话题
start = false;
startIndex = 0;
for (int i = 0; i < l; i++) {BB霜的好处有哪些?
if (strarray[i] == '#') {
if (!start) {
start = true;
sb = new StringBuffer("weibo://weibo.view/");
startIndex = i;
} else {
sb.append('#');
ss.setSpan(new URLSpan(sb.toString()), startIndex, i + 1,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sb = null;
start = false;
}
} else {
if (start) {
sb.append(strarray[i]);
}
}
}
//处理显示表情
String content = str;
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); // 设定TextView话题和url和好友 连接
strarray = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}