效果如图:
代码实现:(把图片替换掉,可以直接拿来用)
</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);
}
}
}
}