最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

對于編輯器的一些思考:Android實踐篇

2022-06-04 18:52 作者:clerk_ma  | 我要投稿

理論脫離不開實踐。所以我連續(xù)用了幾個晚上實現(xiàn)了一個Android的編輯器。效果如下:

雖然說是編輯器,但是編輯相關(guān)的API或者protocol我還沒做完。所以這東西,目前可以作為代碼預(yù)覽器或者查看器。

前幾天,亞馬遜說Kindle要退市。這也讓我想起我以前在京東做的,就是電子書。當然,當時沒做多好。不過,當時京東電子書業(yè)務(wù)的代碼,是收購了一家現(xiàn)成的電子書的app的代碼。也就是說,當時京東是有兩套電子書相關(guān)的代碼的。舊版的,是基于一個類瀏覽器的項目,后來基本停止運行了,人員分布到其他項目了。

之所以提京東的這個事。那是因為京東當年收購的這一家電子書的app,實際上也傳出來過亞馬遜也想收購的消息。但是實話說,亞馬遜收不收購,kindle的電子書閱讀效果也就那樣了。

寫電子書排版的東西,實際上跟我寫這個編輯器有一定的聯(lián)系。不過,現(xiàn)在Android的API很豐富了,如果當年有比較新的API,那么項目做起來會方便一些。當然,難度依然有。如果我把現(xiàn)在的編輯器的字體換一換,加上line wrap,加上空格的justification,那么就是一個很簡易的電子書閱讀器,或者是簡易的Word,甚至做成markdown編輯器也不難。

目前,Android版的編輯器最小的API依賴是23,也就是Android 6.0。在京東的時候,21的API也剛出來,也就是Android 5.0,甚至沒有測試機,用的京東內(nèi)部的一個員工提供的手機測試的。

回到編輯器的話題上來。line wrap先不談。就說編輯器怎么做的問題。沒有難題,就是畫圖?;贏ndroid的View,擴展出來一個自定義的View,然后在onDraw中繪制。

Android的onDraw里面,會在Canvas中繪制。那么大概過程如下:

第5個,就是難度在的地方,按道理,我是可以把TeX的短行算法直接放進去,但是代碼編輯器一般是不會這么干的。這個地方的難度在于,一行數(shù)據(jù)改變之后,其他行數(shù)據(jù)可能也要更新,如何不卡,如何不崩,就是難點。

編輯器的繪制就是這樣。接下來是交互。

第一個交互就是讓這個編輯器像系統(tǒng)的TextView一樣可以編輯,可以接受輸入。這部分,Android的文檔寫的很晦澀,但也不是不能搞:

這四個函數(shù),覆蓋掉基本就能處理輸入了。不過怎么處理軟鍵盤的行為,這個測試量就不小了。

第二個交互就是支持觸摸手勢或者相關(guān)的事件。這個介紹的文章就很多了。我這里就不描述了。

第三個交互,就是圖上面的光標怎么做。一種方法,就是在View里面設(shè)置一個Timer,給定一個300毫秒或者500毫秒的值來控制光標的顯示還是不顯示,通過onDraw來實現(xiàn)。另一種方法,就是把編輯器的組件拆分成幾個View,所有組件都是放在一個ViewGroup里。也就是說光標是一個View。

其他的就不是很麻煩了,跟繪制的關(guān)系就不大,屬于設(shè)計編輯器的后端。比如是不是要用piece table,command或者快捷鍵怎么處理。這些只要熟悉Java就可以寫。

iOS上面,做這種類似的View流程其實很相似,只不過iOS上有CoreText,有CTFrame和CTLine之類的現(xiàn)成組件來做相關(guān)的工作。在設(shè)計上,經(jīng)過我比較之后,我發(fā)現(xiàn)這倆平臺的API互有勝負。


對于編輯器的一些思考:Android實踐篇的評論 (共 條)

分享到微博請遵守國家法律
岳普湖县| 翁源县| 河东区| 文山县| 邯郸市| 阿拉善盟| 双峰县| 定州市| 新兴县| 合川市| 十堰市| 张家界市| 赫章县| 漳浦县| 张家口市| 砚山县| 内丘县| 海门市| 门头沟区| 宿州市| 时尚| 巴南区| 鄂尔多斯市| 内江市| 遂昌县| 桑日县| 合肥市| 教育| 双峰县| 安化县| 且末县| 霍山县| 小金县| 金平| 农安县| 会同县| 洛扎县| 中山市| 荔波县| 罗城| 呼玛县|