捕獲Android文字中連結點選事件
Android中的TTextView很強大,我們可以不僅可以設定純文字為其內容,還可以設定包含網址和電子郵件地址的內容,並且使得這些點選可以點選。但是我們可以捕獲並控制這些連結的點選事件麼,當然是可以的。
本文將一個超級簡單的例子介紹一下如何實現在Android TextView 捕獲連結的點選事件。
關鍵實現
實現原理就是將所有的URL設定成ClickSpan,然後在它的onClick事件中加入你想要的控制邏輯就可以了。
private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder, final URLSpan urlSpan) { int start = clickableHtmlBuilder.getSpanStart(urlSpan); int end = clickableHtmlBuilder.getSpanEnd(urlSpan); int flags = clickableHtmlBuilder.getSpanFlags(urlSpan); ClickableSpan clickableSpan = new ClickableSpan() { public void onClick(View view) { //Do something with URL here. } }; clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags); } private CharSequence getClickableHtml(String html) { Spanned spannedHtml = Html.fromHtml(html); SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml); URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class); for(final URLSpan span : urls) { setLinkClickable(clickableHtmlBuilder, span); } return clickableHtmlBuilder; }
如何使用
TextView myTextView = (TextView)findViewById(R.id.myTextView); String url = "This is a page with lots of URLs. <a href=\"http://droidyue.com\">droidyue.com</> " + "This left is a very good blog. There are so many great blogs there. You can find what" + "you want in that blog." + "The Next Link is <a href=\"http://www.google.com.hk\">Google HK</a>"; myTextView.setText(getClickableHtml(url));
實現自己的控制
我們需要在ClickSpan的onClick方法中加入自己的控制邏輯,比如我們使用傲遊瀏覽器開啟點選的連結。
public void onClick(View view) { Log.i(LOGTAG, "onClick url=" + urlSpan.getURL() ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(urlSpan.getURL())); intent.setPackage("com.mx.browser"); startActivity(intent); }
提醒
不要忘了設定TextView的autoLink屬性。
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" android:id="@+id/myTextView" android:autoLink="web" />
demo原始碼
相關文章
- JavaScript事件捕獲冒泡與捕獲JavaScript事件
- JavaScript 事件捕獲JavaScript事件
- Javascript中的事件冒泡與捕獲JavaScript事件
- JS中的事件順序(事件捕獲與冒泡)JS事件
- 如何捕獲html資料表格連結?HTML
- 關於js事件冒泡和事件捕獲JS事件
- 理解js的事件冒泡和事件捕獲JS事件
- 事件的捕獲、冒泡、委託事件
- android 異常捕獲-UncaughtExceptionHandlerAndroidException
- Android中點選事件的四種寫法詳解Android事件
- javascript事件捕獲是什麼意思JavaScript事件
- 【Javascript】獲取選中的文字JavaScript
- WKWebView 獲取網頁高度,圖片點選檢視,網頁連結點選WebView網頁
- 在DOM上同時繫結兩個點選事件(一個用捕獲,一個用冒泡),事件總共會執行幾次,先執行哪個事件?事件
- WPF雙滑塊控制元件以及強制捕獲滑鼠事件焦點控制元件事件
- 用Kotlin實現Android點選事件的方法KotlinAndroid事件
- 從零開始,開發一個 Web Office 套件(10):捕獲鍵盤事件,輸入文字Web套件事件
- 探究 | 如何捕獲一個Activity頁面上所有的點選行為
- 點選文字選中或取消選中checkbox核取方塊
- android 跨程式點選方式總結Android
- 如何使用短連結工具在微信公眾號中埋點統計連結點選量
- js複製連結並且選中文字JS
- 【Android ViewPager】解決ViewPager使用DepthPageTransformer時事件會被下一頁捕獲導致事件錯亂的問題AndroidViewpagerORM事件
- 點選連結取消跳轉效果
- 點選連結背景變色效果
- android短視訊開發,點選分享按鈕生成分享連結Android
- python中如何捕獲異常Python
- 中國地圖繪製-點選事件地圖事件
- 事件溯源的好處在於可在軟體中捕獲現實世界 – Jessitron事件
- [Android]關於Android子view超出父view無法響應點選事件AndroidView事件
- 迴圈點選連結selenium模擬
- jQuery捕獲jQuery
- 如何使用點選超連結的方式開啟Android手機上的應用Android
- databinding的點選事件事件
- 點選事件的委派事件
- 結點插入到單連結串列中
- 連結串列中環的入口結點
- 事件溯源模式:分離事件的發生和捕獲兩種不同時間 - verraes事件模式
- Android TextSwitcher通知公告自動上下滾動且帶點選事件Android事件