首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Spannable 繪製到 Bitmap:DynamicLayout 保留富文本樣式

     編輯:程式設計綜合問答

需求

EditText + Spannable 實現富文本編輯器(字體、顏色、粗體等),需將編輯內容連同樣式繪製為圖片發送。

核心方案:DynamicLayout

`DynamicLayout` 可直接渲染 `CharSequence`(含 Span)到 `Canvas`,保留所有樣式。

完整代碼

public Bitmap spannableToBitmap(CharSequence text, TextPaint paint, int width, int height) {
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    canvas.drawColor(Color.WHITE); // 背景色

    DynamicLayout layout = new DynamicLayout(
        text, paint, width,
        Layout.Alignment.ALIGN_NORMAL, 1.0f, 1.0f, false
    );
    layout.draw(canvas);
    return bitmap;
}

// 調用示例
TextPaint paint = new TextPaint();
paint.setTextSize(30);
paint.setTypeface(Typeface.DEFAULT);
Bitmap bmp = spannableToBitmap(editText.getText(), paint, 800, 600);

關鍵參數

  • `width`:換行寬度,超出自動換行。
  • `Alignment`:段落對齊方式。
  • `mult`/`add`:行距乘數/加數,通常 1.0f/1.0f。
  • `includePad`:是否包含字體內邊距。

避坑

  • 圖片過大導致 OOM,需限制尺寸或分塊繪製。
  • `TextPaint` 需與編輯器一致(字體、大小、顏色),否則渲染差異。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved