天天看點

android自動生成textview,Android中TextView文字自動生成連結

下面我們通過具體操作來示範一下如何實作TextView文字自動生成連結。

一、在Layout檔案中設定TextView的屬性

android:autoLink="email|phone|web"

這樣Android就會自動識别郵件、電話号碼、網址了,點選時會出發不同的Intent進行處理。

二、使用Linkify

Linkify是一個輔助類,通過RegEx樣式比對,自動地在TextView類(和繼承的類)中建立超連結。

符合特定的RegEx樣式的文本會被轉變成可點選的超連結,這些超連結隐式地調用startActivity(new Intent(Intent.ACTION_VIEW, uri)),符合的文本會作為目标URI。

你可以指定任意的字元串樣式為連結;友善地,Linkify類提供了預置的通用内容類型(如電話号碼和e-mail、web位址)。

本地的連結類型

Linkify.addLinks靜态方法接受一個View來制作連結,還包括一個或多個支援的預設内容類型的位結果。Linkify類提供了一些内容類型:WEB_URLS、EMAIL_ADDRESSES、PHONE_NUMBERS和ALL.

接下來的代碼片段顯示如何為TextView制作連結顯示web和e-mail位址為超連結。當點選時,它們會相應地打開浏覽器或e-mail應用程式。

TextView textView = (TextView)findViewById(R.id.myTextView);

Linkify.addLinks(textView, Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES);

你可以在layout資源裡使用android:autoLink特性來為View制作連結。它支援一個或多個(用|分割)自定義的值:none、web、email、phone或all。接下來的XML片段顯示了如何為電話号碼和e-mail位址添加超連結:

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:text=”@string/linkify_me”

android:autoLink=”phone|email”

/>

建立自定義的連結字元串

為了定義自己的連結字元串,你需要建立一個RegEx樣式來比對文本,進而顯示成超連結。

和本地類型一樣,通過調用Linkify.addLinks來指定目标View,但這次,傳入的是新的RegEx樣式。你還可以傳入一個字首,當連結點選時,它會添加到目标URI上。

接下來的例子顯示了一個View連結到由Android Content Provider(下一章你會建立)提供的地震資料。與包含所有的情況相比,連結樣式能比對任何以“quake”開頭後跟一個數字的文本。在Intent被觸發前,内容會被添加到URI上。

intflags = Pattern.CASE_INSENSITIVE;

Pattern p = Pattern.compile(“\\bquake[0-9]*\\b”, flags);

Linkify.addLinks(myTextView, p, “content://com.paad.earthquake/earthquakes/”);

Linkify還支援TranformFilter和MatchFilter接口。它們提供一些對目标URI的額外控制和定義比對字元串,它們的使用如下的架構代碼所示:

Linkify.addLinks(myTextView, pattern, prefixWith,newMyMatchFilter(),newMyTransformFilter());

使用Match Filter

在你定義的MatchFilter中實作acceptMatch方法,來為RegEx樣式比對添加額外的條件。當一個潛在的比對發現時,acceptMatch被觸發,比對的開始點和結束點(包括被查找的整個文本)以參數的形式傳入。

接下來的代碼顯示了一個MatchFilter的實作,它取消任何之前是一個“!”的比對。

classMyMatchFilterimplementsMatchFilter {

  publicbooleanacceptMatch(CharSequence s,intstart,intend) {

  return(start ==0|| s.charAt(start-1) != ‘!’);

  }

}

使用Transform Filter

Transform Filter為格式化文本字元串提供了更大的自由度,允許你修改由連結文本自動生成的隐式URI。減少連結文本和目标URI的耦合能更加自由地決定如何顯示資料字元串給使用者。

使用Transform Filter,在你定義的TransformFilter中實作transformUrl方法。當Linkify找到正确的比對後,它會調用transformUrl,傳入使用的RegEx樣式和它建立的預設URI字元串。你可以修改比對的字元串,然後傳回一個适合給其它Android應用程式“看”的URI。

下面的TransformFilter實作将比對的文本轉換成小寫的URI:

classMyTransformFilterimplementsTransformFilter {

  publicString transformUrl(Matcher match, String url) {

  returnurl.toLowerCase();

  }

}

看完這篇文章為您介紹的TextView文字自動生成連結的方法,相信對您一定有所啟發。

【編輯推薦】

【責任編輯:闫佳明 TEL:(010)68476606】

點贊 0