有时在开发过程中,我们会有在TextView中添加图片的需求(比如下图箭头所指文字中的表情)。而在xml中对Textview进行属性设置时,只能设置图片在TextView的左、右、上、下四个位置,不能添加到中间的某个位置,这就要求我们在编写代码时动态的进行相关操作了。
这里就给出两种解决方法:
1,使用SpannableString/SpannableStringBuilder;具体使用方法如下:
1),构造String
SpannableString spanString = new SpannableString("好厉害的魔术啊,小姑娘。。。");
2),构造Span
Drawable d = getResources().getDrawable(R.drawable.doraemon);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
3),利用SetSpan()对指定范围的String应用这个Span
spanString.setSpan(span, 6, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spanString);
方法一完成,同时要说的是,SpannableString可以用来给字体设置各种效果,例如不同颜色,下划线,粗体/黑体字,背景色等等。
2,使用Html.fromHtml方法来设置图片
/**
* 项目资源图片 * @author Susie
*/
private final class ProImageGetter implements Html.ImageGetter {
@Override
public Drawable getDrawable(String source) { // 获取到资源id
int id = Integer.parseInt(source);
Drawable drawable = getResources().getDrawable(id);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
return drawable;
}
}
String html = "好厉害的魔术" + "<img src=""+R.drawable.doraemon+"">"+",小姑娘。。。";
textView.setText(Html.fromHtml(html, new ProImageGetter(), null));
方法二至此也已完成,此方法主要是通过对Html的ImageGetter参数进行自定义来设置图片的。
其实方法一也好,方法二也好,Drawable的获取既可以来自网络,也可以来自存储空间,或者程序自带,是具体情况而定。
参考资料:1,http://blog.youkuaiyun.com/harvic880925/article/details/38984705
2,http://blog.youkuaiyun.com/u010418593/article/details/9324101