效果如图:
代码实现:(把图片替换掉,可以直接拿来用)
</pre><pre name="code" class="java">package com.example.tuhuadmin.fanxinglei.widget; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.ImageFormat; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.ImageSpan; import android.widget.BaseAdapter; import android.widget.TextView; import com.example.tuhuadmin.fanxinglei.R; import com.example.tuhuadmin.fanxinglei.utils.DensityUtils; /** * Created on 2016/8/14. * Author:crs * Description:XXX */ public class DeadLineActivity extends BaseActivity { private TextView tv; private String content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_deadline); content = "希望岁月波澜有人陪,余生悲欢有人听.寂寞红尘,为情所困."; tv = (TextView) findViewById(R.id.tv); //处理具体的业务逻辑 process(); } private void process() { //tag1与tag2是将被替代的文本, //要让图片替代指定的文字就要用ImageSpan //开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end) //最后一个参数类似数学中的集合,[5,12)表示从5到12,包括5但不包括12 //Drawable与Bitmap对象 String tag1 = "活动商品";//空格用于分割多个标签 content = content + " " + tag1;//拼接到一起 int tag1Start = content.indexOf(tag1);//获取活动商品的起始位置 int tag1End = tag1Start + tag1.length();//获取活动商品的结束位置 //用于实现图文混排 (content 已经包含了tag1) SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(content); //获取“活动商品”图片的高度与宽度;行高,用于确定图片的高度 字体高度为15sp int lineHeight = DensityUtils.sp2px(this, 13); //把drawable图片资源解析成Bitmap对象 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cp_tag_activity); //获取图片资源的高度 int width = bitmap.getWidth(); //获取Drawable对象 Drawable drawable = getResources().getDrawable(R.drawable.cp_tag_activity); if (drawable != null) { //这行代码主要用于设置矩形在坐标系的位置 左上右下 drawable.setBounds(0, 0, width, lineHeight); //ALIGN_BASELINE 和文字的底部对齐 ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE); //Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 不包括起始位置 spannableStringBuilder.setSpan(imageSpan, tag1Start, tag1End, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); tv.setText(spannableStringBuilder); } //两个标签的情况 if (true) { String tag2 = "不可用券"; //中间加空格用于分割 content = content + " " + tag2; int tag2Start = content.indexOf(tag2); int tag2End = tag2Start + tag2.length(); SpannableStringBuilder ssb = new SpannableStringBuilder(content); //获取长宽高度 Bitmap tag2Bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cp_tag_notavali); int tag2Width = tag2Bitmap.getWidth(); Drawable tag2Drawable = getResources().getDrawable(R.drawable.cp_tag_notavali); if (drawable != null && tag2Drawable != null) { drawable.setBounds(0, 0, width, lineHeight); tag2Drawable.setBounds(0, 0, tag2Width, lineHeight); ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE); ImageSpan imageSpan2 = new ImageSpan(tag2Drawable, ImageSpan.ALIGN_BASELINE); ssb.setSpan(imageSpan, tag1Start, tag1End, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ssb.setSpan(imageSpan2, tag2Start, tag2End, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); tv.setText(ssb); } } } }