TagImageSpan.javapackage com.example.administrator.myapplication; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.GradientDrawable; import android.text.style.ImageSpan; /** * Created by Administrator on 2015/10/30. */ public class TagImageSpan extends ImageSpan { public int expandWidth = 0; //设置之后可能会出现显示不全的问题,可通过TextView的 padding解决 public int expandHeight = 0;//设置之后可能会出现显示不全的问题,可通过TextView的 padding解决 public TagImageSpan() { this( 0, 0); } public TagImageSpan( int expandWidth, int expandHeight) { super(getShape()); this.expandWidth = expandWidth; this.expandHeight = expandHeight; } @Override public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { int width = getWidth(text, start, end, paint); int hight = getHeight(paint); getDrawable().setBounds(0, 0, width, hight); float bgX = x - (expandWidth * 0.5F); //使得在水平方向居中 int bgBottom = bottom + expandHeight / 2;//使得在垂直方向居中 super.draw(canvas, text, start, end, bgX, top, y, bgBottom, paint); canvas.drawText(text.subSequence(start, end).toString(), x, y, paint); } @Override public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) { return getWidth(text, start, end, paint); } /** * 计算span的宽度 * * @param text * @param start * @param end * @param paint * @return */ private int getWidth(CharSequence text, int start, int end, Paint paint) { return Math.round(paint.measureText(text, start, end)) + expandWidth; } /** * 计算span的高度 * * @param paint * @return */ private int getHeight(Paint paint) { Paint.FontMetrics fm = paint.getFontMetrics(); return (int) Math.ceil(fm.descent - fm.ascent) + expandHeight; } /** * 生成shape 可以通过xml实现 * @return */ private static GradientDrawable getShape() { GradientDrawable drawable = new GradientDrawable(); drawable.setCornerRadius(10); drawable.setColor(Color.parseColor("#d8d8d8")); drawable.setStroke(1, Color.parseColor("#b2b2b2")); return drawable; } }
Main2Activity.javapackage com.example.administrator.myapplication; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.widget.TextView; public class Main2Activity extends AppCompatActivity { private TextView text; private TextView text2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); text = (TextView) findViewById(R.id.et); text2 = (TextView) findViewById(R.id.et2); SpannableStringBuilder stringBuilder = new SpannableStringBuilder(); String[] texts = {"琅琊榜", "毙了狗了", "CP"}; for (String s : texts) { SpannableString sp = new SpannableString(s); Object span = new TagImageSpan(0, 10); sp.setSpan(span, 0, sp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); stringBuilder.append(sp).append(","); } text.setText(stringBuilder); text2.setText("琅琊榜,毙了狗了,CP"); } }