好了,直接上代码,这是自定义ImageSpan的代码,非常少。主要的原理是把图片绘制在字体的descent线和ascent的中点位置。还是那句话,先看上面那篇博客。 public class CenterAlignImageSpan extends ImageSpan { public CenterAlignImageSpan(Drawable drawable) { super(drawable); } public CenterAlignImageSpan(Bitmap b) ...
spannable.setSpan(new MyImageSpan(drawable), start, start + faceCode.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 1. 2. 3. 4.
SpannbaleString的setSpan方法中,传入的四个参数分别是 ImageSpan对象、将ImageSpan插入到的起始位置(start)、将ImageSpan插入到的终点位置(end)、是否应用字体样式。 具体将ImageSpan对象插入到哪个位置,由第二个和第三个参数确定,插入的时候会覆盖从 start 位置开始(不包含该位置)到终止位置间的内容(包含该位置)。 ...
ImageSpan 在ImageSpan的构造函数中有一个对齐方式的参数,但只提供了 ALIGN_BASELINE(顶部对齐)、ALIGN_BOTTOM (底部对齐)两种对齐方式,没有居中对齐的方式, 所以只能重写ImageSpan实现图片的居中。public void draw(Canvas canvas, CharSequence text,int start, int end, float x, int top, int y, int bottom, ...
在Android开发中,要让SpannableString添加的图标居中,需要采取一些额外的步骤,因为ImageSpan默认只提供了ALIGN_BOTTOM和ALIGN_BASELINE两种对齐方式。为了实现居中对齐,你可以通过自定义ImageSpan并重写其draw方法来实现。以下是一个详细的步骤和代码示例: 步骤 创建自定义的ImageSpan:继承自ImageSpan并重写draw方法,以便计算并设...
//设置文字背景矩形,x为span其实左上角相对整个TextView的x值,y为span左上角相对整个View的y值。paint.ascent()获得文字上边缘,paint.descent()获得文字下边缘 canvas.drawRoundRect(oval, (y + paint.descent()) /2, (y + paint.descent()) /2, paint);//绘制圆角矩形,第二个参数是x半径,第三个参数...
回到主题,我们要让imagespan与text对齐,只需把imagespan放到descent线和ascent线之间的中间位置就可以了。实现方式为重写ImageSpan类的draw方法。最终实现方法如下: @Overridepublicvoiddraw(@NonNull Canvas canvas, CharSequence text,intstart,intend,floatx,inttop,inty,intbottom, @NonNull Paint paint) {//image to...
步骤2:创建CenterImageSpan类 在Android中,可以使用SpannableString和ImageSpan来实现在TextView中插入图片的效果。为了使图片居中显示,我们需要自定义一个CenterImageSpan类,继承自ImageSpan。以下是CenterImageSpan类的代码: publicclassCenterImageSpanextendsImageSpan{publicCenterImageSpan(Contextcontext,Bitmapb){super(context,...
1、基本思路:传统的ImageSpan只能设置图片位于顶部或底部,而无法实现居中对齐,为此,我们可以自定义一个CustomImageSpan来解决这个问题。 2、代码示例: public class CustomImageSpan extends ImageSpan { private int verticalAlignment; public CustomImageSpan(Drawable drawable, int verticalAlignment) { ...
verticalAlignment:Int=0,//默认底部 4是垂直居中 maginLeft:Int=0, marginRight:Int=0, width:Int=0, height:Int=0 ) : CharSequence { returnSpannableString(this).apply { setSpan( MiddleIMarginImageSpan( CommUtils.getDrawable(imageRes) .apply { ...