捕獲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事件
- JS事件(事件冒泡和事件捕獲)JS事件
- 如何捕獲html資料表格連結?HTML
- 模擬實現超連結的點選事件事件
- 關於js事件冒泡和事件捕獲JS事件
- javascript事件冒泡和事件捕獲型別JavaScript事件型別
- 理解js的事件冒泡和事件捕獲JS事件
- 事件的捕獲、冒泡、委託事件
- JavaScript事件冒泡、事件捕獲和阻止預設事件JavaScript事件
- 【Javascript】獲取選中的文字JavaScript
- Android在ListView的onTouch事件中獲取選中項的值AndroidView事件
- javascript事件捕獲是什麼意思JavaScript事件
- WKWebView 獲取網頁高度,圖片點選檢視,網頁連結點選WebView網頁
- bootstrap中如何使input中的小圖示獲得點選事件boot事件
- RecyclerView中item點選事件View事件
- Android--按鈕點選事件Android事件
- Android觸控事件(續)——點選長按事件Android事件
- android 異常捕獲-UncaughtExceptionHandlerAndroidException
- Android中點選事件的四種寫法詳解Android事件
- 捕獲silverlight滾輪事件事件
- 如何捕獲jvm的退出事件啊?JVM事件
- 點選文字框實現文字框內容選中效果
- js實現的將文字中的url網址轉換為可以點選的連結JS
- DataBinding中xml 點選事件XML事件
- 點選事件獲取當前li的索引事件索引
- WPF雙滑塊控制元件以及強制捕獲滑鼠事件焦點控制元件事件
- WPF捕獲事件即使這個事件被標記為Handled事件
- javascript的事件監聽與捕獲和冒泡JavaScript事件
- 如何使用短連結工具在微信公眾號中埋點統計連結點選量
- jQuery連結點選變色 點選其他還原jQuery
- 探究 | 如何捕獲一個Activity頁面上所有的點選行為
- 前端進階之路:點選事件繫結前端事件
- JavaScript高階程式設計筆記 事件冒泡和事件捕獲JavaScript程式設計筆記事件
- 表單元素文字內容選中事件onselect事件