就是多选 这个图标 和文字一起 算一个文本, 折行时 不是分离的。而且 图片和文字 要适应居中.
1.封装的类
//图文 混排 让图片居中 public class CenterImageSpan extends ImageSpan { public CenterImageSpan(Drawable drawable) { super(drawable); } public CenterImageSpan(Bitmap bitmap) { super(bitmap); } @Override public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) { Drawable b = getDrawable(); Paint.FontMetricsInt fm = paint.getFontMetricsInt(); int transY = (y + fm.descent + y + fm.ascent) / 2 - b.getBounds().bottom / 2;//计算y方向的位移 canvas.save(); canvas.translate(x, transY);//绘制图片位移一段距离 b.draw(canvas); canvas.restore(); } }//图文混排 公共方法 2.//context 上下文,String string 要改变的文本内容, id 要凭接进去的图片id R.drawable.tupian public static CharSequence set_img(Context context,String string, int id) { //给SpannableString设置ImageSpan Drawable drawable = context.getResources().getDrawable(id); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); //需要处理的文本,"tidai" 是将要被图片替代的位置, + " " 是为了 不让图片紧挨文字 //拿到 spannable_string SpannableString spannable_string = new SpannableString("tidai" + " " + string.toString()); //要让图片替代指定的文字就要用ImageSpan CenterImageSpan imageSpan = new CenterImageSpan(drawable); //开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end) spannable_string.setSpan(imageSpan, 0, "tidai".length(), ImageSpan.ALIGN_BASELINE); return spannable_string; }
3.
//用法 set_img(getActivity(),string, R.drawable.ig_tiku_duoxuan)附:
(如果图片最低部有 1或者2 dp 不显示, 那个在textview 属性设置 android:paddingBottom="2dp")
