效果圖
相關(guān)接口
<code>
public final void setText(CharSequence text)</code>
TextView 設(shè)置顯示內(nèi)容的接口懈糯;
<code>public static Spanned fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler)</code>
Html 類中用于解析html資源的接口咕别,source 表示html內(nèi)容咐柜,ImageGetter 是圖片下載器,TagHandler 是標(biāo)簽解析器缔御,返回值Spanned 是一個接口钥弯,繼承自CharSequence;
<code>public static Spanned fromHtml(String source)</code>
實(shí)際上是調(diào)用的上面的接口休讳,ImageGetter 和 TagHandler 都傳值為null 。這種情況下就只能支持默認(rèn)的html標(biāo)簽解析以及無法進(jìn)行圖片加載尿孔,這種情況下俊柔,demo的顯示會變成
Android TextView 本身支持的 html標(biāo)簽類型:
圖片加載器的設(shè)置
ImageGetter 實(shí)際上是一個接口,提供了一個方法活合,
<code>public Drawable getDrawable(String source);</code>
它的調(diào)用發(fā)生在解析到img標(biāo)簽的時候雏婶,會去同步的加載圖片資源
明顯的是,網(wǎng)絡(luò)圖片的下載以及加載時不能夠通過同步接口完成的白指,必須通過異步線程實(shí)現(xiàn)下載留晚,成功后回調(diào)顯示
標(biāo)簽解析器的擴(kuò)展
TagHandler 同樣是一個接口,提供方法
<code>public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader);</code>
需要額外解析一些標(biāo)簽的時候告嘲,實(shí)現(xiàn)對應(yīng)的方法即可
顯示內(nèi)容點(diǎn)擊事件的獲取
TextView 提供方法 setMovementMethod(MovementMethod movement)错维,設(shè)置MovementMethod 對象,重寫其onTouchEvent()方法橄唬,就可以獲取到顯示內(nèi)容的點(diǎn)擊事件加以處理 赋焕。以下是圖片點(diǎn)擊事件和超鏈接點(diǎn)擊事件的獲取示例:
通過以上幾個步驟的處理,就可以得到開始的顯示效果仰楚,同時支持圖片超鏈接的點(diǎn)擊事件了宏邮,完整demo地址:HtmlTest
https://github.com/binye33333/android.git
發(fā)現(xiàn)的問題
內(nèi)存問題
圖片數(shù)據(jù)是一次性加載進(jìn)去的,不是根據(jù)顯示需要從緩存中獲取缸血。這里就會暴露一個問題,在大量圖片加載的時候械筛,頁面會大量的占用內(nèi)存資源捎泻,導(dǎo)致內(nèi)存溢出
內(nèi)存不可控的問題導(dǎo)致了這種方案完全無法被采納,因?yàn)槲覀儾恢酪黄恼碌降讜卸啻蟮膱D片數(shù)據(jù)埋哟,除非給與約束笆豁;-
超鏈接的點(diǎn)擊背景
超鏈接點(diǎn)擊后,內(nèi)容背景色沒有恢復(fù)