1. TextView 中嵌套图片的方法
TextView textView...
textView.setText("...");
textView.append(Html.fromHtml("",imageGetter, new MTagHandler(context)));
就是在 TextView 中加入包含图片的 html 代码。
Html.fromHtml(String source,
ImageGetter imageGetter, TagHandler tagHandler)
其中 source 里面放 html
代码,里面加入图片的资源ID(R.id.xxx)。
ImageGetter 是一个接口,里面有抽象方法 public
Drawable getDrawable(String source); 用来获取图片的 Drawable 对象(可以从网络,或 res 资源,或本地文件获取,本例中从
res 中获取)。
TagHandler 是一个接口,用来处理 html 标签。当我们遇到一个 html
标签后,做相应的处理工作,比如点击的响应。
2. TextView 中嵌套图片的点击响应
ImageGetter 的实现:
ImageGetter imageGetter = newImageGetter() {
@OverridepublicDrawable getDrawable(String source) {int id =Integer.parseInt(source);
Drawable drawable=context.getResources().getDrawable(id);
drawable.setBounds(int left, int top, int right, int bottom);returndrawable;
}
};
TagHandler 的实现:
public class MTagHandler implementsTagHandler {private int sIndex = 0;private int eIndex = 0;private finalContext mContext;publicMTagHandler(Context context) {
mContext=context;
}public void handleTag(booleanopening, String tag, Editable output,
XMLReader xmlReader) {//TODO Auto-generated method stub
if (tag.toLowerCase().equals("img")) {if(opening) {
sIndex=output.length();
}else{
eIndex=output.length();
output.setSpan(newMSpan(), sIndex, eIndex,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}private class MSpan extends ClickableSpan implementsOnClickListener {
@Overridepublic voidonClick(View widget) {//TODO Auto-generated method stub
Log.e("test", "aaaaaaaaaaaa");
Toast.makeText(context,"sdfdsfsdfdsf", 1000).show();
}
}
}
碰到 img 标签后做 onClick 里的响应处理。
3. TextView 中部分文字的点击相应:
这里需要使用 SpannableString(不可变) 或 SpannableStringBuilder(可变)。
首先,创建一个 SpannbleString:
SpannableString spannableString = new SpannableString("xxxx");
spannableString.setSpan(Object what, int
start, int end, int flags);
Object what 这里放一个 ClickableSpan,并实现它的 onClick 方法用于点击相应。
int start,int end 定义字符串的区间。
int flags 表示样式。在 Spanned
类中有很多参数可供使用。常用的是 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
spannableString.setSpan(newClickableSpan() {
@Overridepublic voidonClick(View widget) {//TODO Auto-generated method stub//要做的事写在这里
}
},0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
然后把 TextView 的文字内容设置为 SpannbleString:
textView.setText(spannableString);
一篇不错的写 SpannbleString 的文章:
原文:http://www.cnblogs.com/davesuen/p/3612181.html