ImageSpan圖片和在行文字居中

文字中添加圖標:

/** 文字中增加圖標 */
    public static Spannable addDrawableInText(int start, int end, int resouceId, Spannable text) {
        Drawable drawable = SkinManager.getInstance().getDrawable(resouceId);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        text.setSpan(new MyImageSpan(drawable), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        return text;
    }

圖片span

public class MyImageSpan extends ImageSpan {
    public MyImageSpan(Context arg0, int arg1) {
        super(arg0, arg1);
    }

    public MyImageSpan(Drawable d) {
        super(d);
    }

    @Override
    public void draw(Canvas canvas, CharSequence text, int start, int end,
                     float x, int top, int y, int bottom, Paint paint) {

        Drawable b = getDrawable();
        // font metrics of text to be replaced
        Paint.FontMetricsInt fm = paint.getFontMetricsInt();
        int transY = (y + fm.descent + y + fm.ascent) / 2
                - b.getBounds().bottom / 2;

        canvas.save();
        canvas.translate(x, transY);
        b.draw(canvas);
        canvas.restore();
    }
}

點擊和顏色的span:

class TopicsBlueSpan extends ClickableSpan {
    private String content;

    public TopicsBlueSpan(String content) {
        this.content = content;
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setColor(Color.BLUE);
        ds.setUnderlineText(false);
    }

    @Override
    public void onClick(View widget) {
        ...
    }
}

此時點擊后會出現文字選中出現淡綠色的背景色現象。ds.setColor()設定的是span超鏈接的文本顏色,而不是點擊后的顏色,點擊后的背景顏色HighLightColor屬于TextView的屬性,通過方法
textview.setHighlightColor(Color.TRANSPARENT);解決。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容