TextView中实现图文混排的三种方式
1、使用WebView组件显示HTML页面。
2、集成View类或其子类,并覆盖onDraw方法,在该方法中直接绘制富文本或图像。
3、在TextView组件中可以使用富文本标签显示富文本信息,这种标签类似于HTML标签,但比HTML标签简单,比如,<font>用于设置字体,<b>用于设置粗体,但要先使用Html.fromHtml方法将这些文本转换成CharSequence对象,然后再将该对象作为TextView.setText方法的参数值。
在显示图像时需要实现ImageGetter接口,通过ImageGetter.getDrawable方法返回封装图像资源的Drawable对象。
4、在TextView组件中显示图像还可以使用ImageSpan对象,ImageSpan对象用于封装Bitmap对象,并通过SpanableString对象封装ImageSpan对象,最后将SpannableString对象作为TextView.setText方法的参数值将图像显示在TextView组件上。
使用<img>标签在TextView中插入图像
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textview) CharSequence charSequence = Html.fromHtml(html,new Html.ImageGetter(){ @Override public Drawable getDrawable(String source) { //装载图像资源 Drawable drawable = getResources().getDrawable(getResourceId(source)); //设置要显示图像的大小(按原大小显示) drawable.setBounds(0,0,drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); return drawable; } },null); textView.setText(charSequence);
使用ImageSpan对象在TextView组件中显示图像
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textview); //根据资源ID获得资源图像的Bitmao对象 Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon); //根据Bitmao对象创建ImageSpan对象 ImageSpan imageSpan = new ImageSpan(this,bitmap); //创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像 SpannableString spannableString = new SpannableString("icon"); //用ImageSpan对象替换icon spannableString.setSpan(imageSpan,0,4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //将图像显示在TextView组件上 textView.setText(spannableString); }