Android TextView里直接显示图片的三种方法

方法一:重写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

下为效果图,上下两幅图分别相应另外一种和第三种方法:




原文地址:https://www.cnblogs.com/bhlsheji/p/5079648.html