優(yōu)化實踐---文本樣式支持服務(wù)端配置方案

最近做到這樣一個需求,服務(wù)端返回一段html文案,里面文字是部分可點擊的,而且點擊后需要跳轉(zhuǎn)到h5頁面。咋一聽,感覺很簡單呀,調(diào)用一下Html中的fromHtml方法不是分分鐘解決了么。


初步嘗試

以“<a href="www.baidu.com">百度<a>一下,你就<font color="#0099ff">知道</font>”為例:

出來的效果是這樣的:

這里注意要給textView設(shè)置MovementMethod,如下所示:

textView.setMovementMethod(LinkMovementMethod.getInstance());

好了,現(xiàn)在百度兩個字已經(jīng)可以點擊了,一點,確實可以跳轉(zhuǎn),不過跳到了系統(tǒng)自帶的瀏覽器里。這里當然需要做一些處理,畢竟用戶在你家App里用著用著,跳到系統(tǒng)的瀏覽器去了,勢必會影響后面的流程。


直觀的方案

那么這里該如何來處理呢,首先想到的一個方案就是,既然系統(tǒng)默認會跳轉(zhuǎn)到自帶的瀏覽器,那我們索性不用fromHtml方法了,直接將Html中的各個標簽解析處理,再通過SpannableString設(shè)置對應(yīng)處的點擊事件和顏色顏色樣式就好了。但是這樣做的話開發(fā)成本很大,首先要做標簽的解析,標簽有平行的層級還有嵌套的層級,解析起來可就復(fù)雜了。


能否通過截獲點擊事件來做處理

上面講到過,如果不給textView設(shè)置MoveMentMethod,那么html文本中的鏈接點擊將不會生效,這時我們再給這個textView設(shè)置點擊效果就好啦(跳轉(zhuǎn)鏈接從html中用正則表達式解析出來),但這個方案有兩個問題:1.現(xiàn)在文本是整個可點擊了,而不是局部可點擊(ui大佬要跑來和我撕b了);2.如果文本中有多個地方需要跳轉(zhuǎn)不同鏈接這種方案也實現(xiàn)不了


尋找新思路

在搜索資料后發(fā)現(xiàn),textView設(shè)置html樣式時將點擊樣式解析成了URLSpan,而URLSpan設(shè)置的默認效果是打開系統(tǒng)瀏覽器。這個默認效果我暫時沒想到方法修改,但是可以從這個URLSpan中獲取鏈接,然后創(chuàng)建一個ClickableSpan來處理點擊效果(這些Span是SpannableString中用來設(shè)置各種局部效果的),然后將原來的URLSpan效果去除,這樣就可以自定義點擊效果啦~

代碼如下:

這里自定義了ClickableSpan,去除了默認的下滑線效果。

還有一個要注意的地方是textView必須設(shè)置MovementMethod,不然從textView中獲取的文本就不是Spannable類型的,無法進行后續(xù)的處理。

好了,現(xiàn)在只要修改ClickableCallback接口的onClickableCallback方法的實現(xiàn)就可以自定義點擊以后的邏輯啦,大功告成~

拿個例子測試一下:

<a ><font color = "#ff6699">百度</font></a>......<a ><font color = "#0099ff">搜狗</font></a>

效果如下:


這樣一來,文本內(nèi)容、顏色和鏈接都可以由服務(wù)端控制啦,上線以后想調(diào)整就很方便了,不用再等客戶端下次發(fā)版!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,334評論 0 17
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 14,154評論 1 92
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評論 25 709
  • 前段時間在開發(fā)群里看到有人問android的TextView該如何自定義超鏈接的跳轉(zhuǎn),如:有字符串“使用該軟件,即...
    zhangjinhuang閱讀 7,379評論 1 36
  • 淚珠 是琥珀的心聲 晶瑩的剔透 只為反射你的瞳眸 其實我只是一只小蟲 掙扎不過命運的捉弄 藍天碧草下的追逐 只在夢...
    曖微旸閱讀 430評論 2 2

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