Android 寫一個(gè)屬于自己的印象筆記

之前在看大部分的Android 富文本編輯幾乎都是利用webview實(shí)現(xiàn),所以,便有了做一個(gè)Android原生的富文本編輯器的主意。

https://blog.csdn.net/qq_15893929/article/details/88670198

樣例

照慣例先秀一下圖:

列表
預(yù)覽模式
編輯模式

該富文本編輯器樣式仿照印象筆記的Android版,繪制層實(shí)現(xiàn)基于Android的span樣式。

目前已經(jīng)實(shí)現(xiàn)的功能:
  1. 粗體、斜體、下劃線、刪除線、上下標(biāo)、背景色字體樣式;
  2. 分割線、縮進(jìn)、有序列表、無序列表、復(fù)選框行樣式;
  3. 支持插入本地圖片;
  4. 支持插入網(wǎng)絡(luò)圖片;
  5. 支持圖片預(yù)覽;
  6. 支持撤銷和反撤銷;
  7. 支持本地持久化、支持增刪改;
  8. 支持編輯模式和預(yù)覽模式
具體的實(shí)現(xiàn):

主要的實(shí)現(xiàn)在于編輯頁面,直接是繼承自EditText加以改造的(偷懶),但是如果想實(shí)現(xiàn)一個(gè)商業(yè)級(jí)別的編輯器,建議使用StaticLayout和自定義View,但是需要考慮的東西比較多,例如輸入法和排版布局、選區(qū)管理繪制、各類點(diǎn)擊事件。

大致模塊
  • NoteEditText 繼承自 EditText,NoteEditorManager管理基本邏輯;

  • NoteEditorRender負(fù)責(zé)繪制,NoteLineSpanRender是行樣式、NoteWordSpanRender是字體樣式;

  • NoteRevocationManager負(fù)責(zé)撤銷與反撤銷;

  • NoteImageLoader 是圖片加載庫,之前想用Glide庫,但是Glide不支持直接在UI線程獲取緩沖區(qū)的Bitmap,所以簡單寫了一個(gè)基于OkHttp的圖片加載,內(nèi)部參照(抄)了Glide的思想,例如ImageView在寬高為0時(shí)如何加載圖片、圖片過大時(shí)候怎么處理。Glide太強(qiáng)大了,代碼也好復(fù)雜;
    后續(xù)還是要繼續(xù)替換成Glide,可以通過自定義設(shè)置Glide緩沖池,這樣外部就可以直接拿到緩沖區(qū)數(shù)據(jù);

  • converter 是簡單地將富文本對(duì)象轉(zhuǎn)成文本數(shù)據(jù),或?qū)⑽谋緮?shù)轉(zhuǎn)成富文本對(duì)象的模塊;

  • dao 數(shù)據(jù)庫層;

  • route 是在利用APT和借鑒OkHttp責(zé)任鏈模式仿寫的一個(gè)跳轉(zhuǎn)路由的功能;
    只是自己學(xué)習(xí)所寫的一個(gè)小工具,完全可以去掉。

后續(xù)計(jì)劃:

這個(gè)版本更多的是將自己所學(xué)的一些知識(shí)的運(yùn)用,只做了小一段時(shí)間,所以存留很多了bug和缺陷,后續(xù)會(huì)繼續(xù)找時(shí)間修補(bǔ)。

想增加的內(nèi)容:

  1. 增加導(dǎo)入導(dǎo)出html
  2. 完善圖片池
  3. 增加桌面小部件
  4. 增加保存為圖片
  5. 支持超鏈接、引用更多樣式
源碼:

https://github.com/ChyengJason/SRich

附上
  1. BackgroundColorSpan 背景色
  2. ForegroundColorSpan 文本顏色(前景色)
  3. RasterizerSpan 光柵效果
  4. StrikethroughSpan 刪除線
  5. SuggestionSpan 相當(dāng)于占位符
  6. UnderlineSpan 下劃線
  7. AbsoluteSizeSpan 絕對(duì)大小(文本字體)
  8. DynamicDrawableSpan 設(shè)置圖片,基于文本基線或底部對(duì)齊。
  9. ImageSpan 圖片
  10. RelativeSizeSpan 相對(duì)大小(文本字體)
  11. ReplacementSpan 父類,一般不用
  12. URLSpan 文本超鏈接
  13. StyleSpan 字體樣式
  14. SubscriptSpan 下標(biāo)
  15. SuperscriptSpan 上標(biāo)
  16. TextAppearanceSpan 文本外貌(包括字體、大小、樣式和顏色)
  17. TypefaceSpan 文本字體
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容