EditText 插入圖片實為 ImageSpan,無法直接序列化。主流做法:**圖片存本地/伺服器路徑,文字存純文字,用特殊分隔符組合**。
getFilesDir()/images/) → 取得絕對路徑 /data/user/0/pkg/files/images/abc.jpg。EditText 光標處插入佔位符,如 [[IMG:/data/user/0/pkg/files/images/abc.jpg]]。editText.getText().toString(),直接存入 SQLite TEXT 欄位。String content = cursor.getString(colIdx);
SpannableStringBuilder ssb = new SpannableStringBuilder(content);
Pattern p = Pattern.compile("\\[\\[IMG:(.+?)\\]\\]");
Matcher m = p.matcher(content);
while (m.find()) {
String path = m.group(1);
Bitmap bmp = BitmapFactory.decodeFile(path);
if (bmp != null) {
Drawable d = new BitmapDrawable(getResources(), bmp);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ssb.setSpan(new ImageSpan(d), m.start(), m.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
editText.setText(ssb);
[[IMG:...]]、###IMG###、|||IMG|||。[[MEDIA:type:path]]。大量圖文建議拆表:notes(id, text) + note_images(note_id, path, sort_order),查詢時 JOIN 組裝。
核心模式:**圖片落地存路徑,文字存佔位符,讀取時正則替換為 ImageSpan**。