TextView怎么像ImageView一样显示图片

显示图片的控件并不只有ImageView,今天来使用如下四种方法让TextView显示图片。

第一种:XML文件中指定属性值

android:drawableLeft:在text的左边输出一个drawable,如图片。以下类同
android:drawableTop
android:drawableRight
android:drawableBottom
android:drawablePadding:设置text与drawable(图片)的间隔
这样图片就可以显示在TextView控件上了~
如何设置图片和文本对齐呢?

val tvAsImage = findViewById(R.id.textView)
tvAsImage.setCompoundDrawablesWithIntrinsicBounds(null,
    resources.getDrawable(R.drawable.user_img, null), null, null);

第二种:通过解析HTML来显示图片

 val tvAsImage = findViewById(R.id.textView)
 val htmlForImage = "图片"+""+"展示"
 tvAsImage.text = Html.fromHtml(htmlForImage, { source ->
     val drawable = resources.getDrawable(source!!.toInt(),null)
     drawable.setBounds(0, 0, 200, 200)
     drawable
 }, null)

第三种:通过ImageSpan+SpannableString相结合

mTextView04 = (TextView) findViewById(R.id.textview_04);
ImageSpan imgSpan = new ImageSpan(this, R.drawable.apple);
SpannableString spannableString = new SpannableString("012345");
spannableString.setSpan(imgSpan, 1, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView04.setText(spannableString);

第四种:通过继承TextView方式,使用Bitmap

这种方式的原理是通过继承TextView,并重写onDraw(),让图片直接画到文本上,这会导致图片跟文本重叠,它们之间的间距不好控制。

/**
 * @data on 2021/6/25 3:51 下午
 * @auther KC
 * @describe TextView添加图片
 */
public class TextViewAsImage extends AppCompatTextView {

    private Bitmap mBitmap;

    public TextViewAsImage(Context context) {
        super(context);
    }

    public TextViewAsImage(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        mBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.user_img);
        setTextSize(40);
    }

    public TextViewAsImage(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawBitmap(mBitmap, 0, 0, getPaint());
    }
}

//布局中

你可能感兴趣的:(TextView怎么像ImageView一样显示图片)