日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TextView SpannableString 使用之实现可点击超链接效果

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TextView SpannableString 使用之实现可点击超链接效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TextView SpannableString 使用之實現可點擊超鏈接效果

如果看到這里說明你對 TextView 已經有了一定的了解,至少已經使用過該控件顯示文字過。現在來實現一些復雜一點的效果。

1. 實現可點擊的超鏈接

我們在APP開發過程中會遇到這樣的需求,例如:

其中標記為下劃線的為可點擊,點擊后一般是跳轉一個網頁(這個在這里不做討論)。面對這樣的需求里可能已經知道TextView是可以添加下劃線的,你的實現可能是:

By Login, You agree to our Privicy Policy & Terms of use [TextView]----[TextView]--[TextView]---[TextView] [By Login, You agree to our ][Privicy Policy][ & ][Terms of use]

然后為可點擊的 TextView添加下劃線,然后設置點擊事件就ok了。
如果你滿足于這,那么你可以繼續往后看,看看只用一個TextView 如何實現。

2. 可點擊的超鏈接(基礎)

為了介紹 SpannableString,我們來用它實現一個簡單的下劃線并設置監聽點擊事件。

String clickString = "I Love Android!";SpannableString spannableString =new SpannableString(clickString);spannableString.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {Toast.makeText(getActivity(),"Love",Toast.LENGTH_SHORT).show();}},2,6,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);tv_tip.setText(spannableString);tv_tip.setMovementMethod(LinkMovementMethod.getInstance());

3. 多個可點擊的超鏈接(提高)

這回就要使用一個新的類:SpannableStringBuilder。看到名字就知道,它的作用類似StringBuilder就是把多個SpannableString連接起來。
最后的效果:

點擊效果:

代碼實現(關鍵點就是把多個SpannableString連接起來):

final String linkWord1 = "Android";final String linkWord2 = "Are you ok?";final String linkWord3 = "think you!";String word = "Hello " + linkWord1 + "," + linkWord2 + " I'm fine," + linkWord3;SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(word);int index1 = word.indexOf(linkWord1);int index2 = word.indexOf(linkWord2);int index3 = word.indexOf(linkWord3);spannableStringBuilder.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {Toast.makeText(getActivity(), linkWord1, Toast.LENGTH_SHORT).show();}@Overridepublic void updateDrawState(TextPaint ds) {super.updateDrawState(ds);ds.setColor(Color.RED); //設置文件顏色ds.setUnderlineText(true); //設置下劃線}}, index1, index1 + linkWord1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);spannableStringBuilder.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {Toast.makeText(getActivity(), linkWord2, Toast.LENGTH_SHORT).show();}@Overridepublic void updateDrawState(TextPaint ds) {super.updateDrawState(ds);ds.setColor(Color.GREEN); //設置文件顏色ds.setUnderlineText(true); //設置下劃線}}, index2, index2 + linkWord2.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);spannableStringBuilder.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {Toast.makeText(getActivity(), linkWord3, Toast.LENGTH_SHORT).show();}@Overridepublic void updateDrawState(TextPaint ds) {super.updateDrawState(ds);ds.setColor(Color.BLUE); //設置文件顏色ds.setUnderlineText(false); //設置下劃線}}, index3, index3 + linkWord3.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);tv_tip.setTextSize(14);tv_tip.setText(spannableStringBuilder);tv_tip.setMovementMethod(LinkMovementMethod.getInstance());

4. 多個可點擊的超鏈接(html)

當然還有另外一種方法,就是使用TextView顯示 html格式的文本,然后處理其中的url,過程還是類似我們上面用到的方法,直接上代碼吧:

String html = "<p>\n" +" Hello <a href=\"/link/click1\">Android</a>,<a href=\"/link/click2\">Are you ok?</a>I'm fine,<a href=\"/link/click3\">think you!</a>\n" +" </p>";tv_tip.setText(Html.fromHtml(html));tv_tip.setMovementMethod(LinkMovementMethod.getInstance());CharSequence text = tv_tip.getText();if (text instanceof Spannable) {int end = text.length();Spannable sp = (Spannable) tv_tip.getText();URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);SpannableStringBuilder style = new SpannableStringBuilder(text);style.clearSpans(); // should clear old spansfor (final URLSpan url : urls) {// 設置Spanstyle.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {Toast.makeText(getActivity(), url.getURL(), Toast.LENGTH_SHORT).show();}@Overridepublic void updateDrawState(TextPaint ds) {super.updateDrawState(ds);ds.setColor(Color.RED); //設置文件顏色ds.setUnderlineText(true); //設置下劃線}}, sp.getSpanStart(url), sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}tv_tip.setText(style);}

效果圖:
因為我把所有的連接都設置為紅色,所以顯示的都是紅色,實際中可能進行處理,那時對每個url都進行處理即可。

這里我沒有講每個類的細節,因為我覺得,如果你知道類名,那么你可以查到對應的官方文檔,官方文檔對api的講解是很詳細的,但是官方很少會結合實際需求告訴你如何實現,可能某一個api你不熟悉你就無法和實際需求聯想起來,希望看了 這篇文章想深入了解的可以從 CharSequence 接口(與上面的類緊密聯系)進行展開。
下一篇講 TextView ImageSpan 實現文字圖片混排。

轉載于:https://www.cnblogs.com/didikee/p/7851260.html

總結

以上是生活随笔為你收集整理的TextView SpannableString 使用之实现可点击超链接效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本欧美一本 | 一区二区少妇 | 国产中文字幕一区二区三区 | 蜜桃臀av一区二区三区 | 精品久久电影 | 亚洲精品97久久 | 日皮在线观看 | 国产高清网站 | 欧美日韩高清在线 | 国产成人综合欧美精品久久 | 亚洲精品区 | 最好看的2019年中文在线观看 | 欧美va视频 | 伊人伊人伊人伊人 | 亚洲精品传媒 | av激情影院| 欧美色综合天天久久综合精品 | 欧美日韩一区精品 | 国产精品1区 | 日韩精品免费一区二区三区竹菊 | 国产91边播边对白在线 | 国产精品人妻一区二区三区 | 秋霞欧美视频 | 97久久久久久久久久 | 欧美日韩黄色一级片 | 美女被c出白浆 | 在线视频久久 | 亚洲激情综合网 | 久久桃色 | 日韩黄色av | 久久国产乱子 | 亚洲av人无码激艳猛片服务器 | 免费国产一级 | 黑人高潮一区二区三区在线看 | 亚州| 澳门免费av| 久久国产这里只有精品 | av在线不卡免费观看 | 男人猛吃奶女人爽视频 | 天天干狠狠爱 | 国产免费视频 | 国产中文字幕一区 | 欧美日韩一区二区区 | 黄色a级大片 | 久久久久久国产精品日本 | 色羞羞| 欧美大尺度视频 | 秋葵视频在线 | av白浆 | 亚洲视频在线播放免费 | 99久久久无码国产精品免费 | 国产精品一品二区三区的使用体验 | 日本一级一片免费视频 | 亚洲精品无码专区 | 国产成人午夜高潮毛片 | 国产精品国产三级国产三级人妇 | 深爱开心激情 | 国产毛毛片 | 日韩一区二区三区视频 | 一级空姐毛片 | 国产高清一区二区三区 | 少妇无码一区二区三区 | 色乱码一区二区三区熟女 | 久久亚洲av午夜福利精品一区 | 老师的肉丝玉足夹茎 | 以女性视角写的高h爽文 | 特黄一级毛片 | av日韩一区二区 | 欧美性猛交乱大交 | 日韩a√ | av直播在线观看 | 嫩草影院污 | 原创真实夫妻啪啪av | www.桃色av嫩草.com | 自拍第一页 | 中文字幕亚洲不卡 | 人妻丰满熟妇av无码区免 | 黄色一区二区三区 | 桃谷绘里香番号 | 宿舍女女闺蜜调教羞辱 | 中文字幕.com | 一级片美女 | 成人一区二区在线观看 | 伊人ab| 亚洲人成在线播放 | 国产伦理一区二区三区 | 人人爱人人插 | 精品一区二区毛片 | 国产一区二区三区在线看 | 57pao国产成永久免费视频 | 久久网站免费看 | 午夜精品久久久久久久蜜桃 | wwwa级片| 国产伊人久久 | 国产又爽又黄免费视频 | 亚洲做受高潮 | 国模精品一区 | 日本中文字幕免费观看 | 精品无码黑人又粗又大又长 |