方法一:重写TextView的onDraw方法,也挺直观就是不太好控制显示完图片后再显示字体所占空间的位置关系。一般如果字体是在图片上重叠的推荐这样写。时间关系,这个不付源码了。
方法二:利用TextView支持部分Html的特性,直接用api赋图片。代码如下:
//第一种方法在TextView中显示图片
String html = "<img src='" + R.drawable.circle + "'/>";
ImageGetter imgGetter = new ImageGetter() {
@Override
public Drawable getDrawable(String source) {
// TODO Auto-generated method stub
int id = Integer.parseInt(source);
Drawable d = getResources().getDrawable(id);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
}
};
CharSequence charSequence = Html.fromHtml(html, imgGetter, null);
textView1.setText(charSequence);
textView1.append("您好 ");
注意下面这句话:String html = "<img src='" + R.drawable.circle + "'/>"; img src = 后面除了"之外还有个'号。如果去掉这两个'号就变成了String html = "<img src=" + R.drawable.circle +"/>"; 是会报错的,因为src直接等于了一个数字,是解析不了的。
方法三: 用ImageSpan和SpannableString,代码如下:
//第2种方法在TextView中显示图片
Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.hanguo);
ImageSpan imgSpan = new ImageSpan(this, b);
SpannableString spanString = new SpannableString("icon");
spanString.setSpan(imgSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView2.setText(spanString);
textView2.append("中新网4月27日电 据央视报道,韩国国务总理郑烘原于当地时间27日上午召开发布会,称自己应对韩国“岁月号”沉船事件负责,宣布辞职,并希望家属能原谅及理解他的决定。");
这种方法是最直观的,通过Bitmap或Drawable对象得到ImageSpan对象,再新建SpannableString对象,设置span的内容就ok了。其实SpannableString很强大,如在EditText里将部分文本高亮、下划线、斜体、插入表情都可以用它,详见链接:http://gundumw100.iteye.com/blog/904107
http://blog.csdn.net/rockcoding/article/details/7231756
下为效果图,上下两幅图分别对应第二种和第三种方法: