Android TextView 设置上面的图片

在Android中,TextView是常用的控件之一,用于显示文本内容。有时候我们希望在TextView中,文本的上方能够显示一张图片。本文将介绍如何通过代码设置TextView上面的图片,并提供相应的代码示例。

准备工作

在开始之前,我们需要准备一张图片,可以是本地图片或者网络图片。如果是本地图片,需要将图片放置在res目录下的相应文件夹中,例如放在res/drawable目录下。如果是网络图片,需要确保设备在使用过程中能够访问到该图片。

代码实现

方法一:使用SpannableString

SpannableString是Android提供的用于处理富文本的类。我们可以通过SpannableString在TextView中设置图片。

首先,通过代码创建一个SpannableString对象,然后使用ImageSpan来设置图片。ImageSpan是一个可以显示图片的Span。

SpannableString spannableString = new SpannableString("文字内容");
Drawable drawable = getResources().getDrawable(R.drawable.image);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
spannableString.setSpan(imageSpan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

TextView textView = findViewById(R.id.text_view);
textView.setText(spannableString);

在上面的代码中,我们首先创建了一个SpannableString对象,然后通过getResources().getDrawable(R.drawable.image)方法获取到图片的Drawable对象。接着,通过drawable.setBounds()方法设置图片的大小,然后创建一个ImageSpan对象,将图片和ImageSpan对象绑定,最后通过spannableString.setSpan()方法将ImageSpan对象应用到SpannableString对象上。最后,将设置好的SpannableString对象通过textView.setText()方法设置到TextView中。

方法二:使用HTML标签

除了使用SpannableString来设置图片外,我们还可以使用HTML标签来实现。这种方法更加灵活,可以在TextView中插入其他HTML标签。

在使用HTML标签设置图片之前,需要先将TextView的android:text属性设置为HTML字符串。

<TextView
    android:id="@+id/text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/html_text" />

接下来,在strings.xml文件中添加HTML字符串。

<string name="html_text"><![CDATA[文字内容<br><img src="image" />]]></string>

然后,在Java代码中使用Html.fromHtml()方法将HTML字符串转换为Spanned对象,再将Spanned对象设置到TextView中。

String htmlText = getResources().getString(R.string.html_text);
Spanned spanned = Html.fromHtml(htmlText, new Html.ImageGetter() {
    @Override
    public Drawable getDrawable(String source) {
        Drawable drawable = getResources().getDrawable(R.drawable.image);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        return drawable;
    }
}, null);

TextView textView = findViewById(R.id.text_view);
textView.setText(spanned);

在上面的代码中,我们首先通过getResources().getString(R.string.html_text)方法获取到HTML字符串,然后使用Html.fromHtml()方法将HTML字符串转换为Spanned对象。在Html.fromHtml()方法的第二个参数中,我们创建了一个Html.ImageGetter对象,通过getDrawable()方法获取图片的Drawable对象,并设置其大小。最后,将转换好的Spanned对象通过textView.setText()方法设置到TextView中。

使用场景

  • 在聊天界面中,显示消息上面的头像。
  • 在列表中,显示每个条目上面的图标。

总结

本文介绍了如何通过代码设置TextView上面的图片。我们可以使用SpannableString或HTML标签来实现这个功能。通过这种方式,我们可以更加灵活地在TextView中显示图片,满足不同的需求。

希望本文对你有所帮助,如果有任何疑问,请留言讨论。