1. 程式人生 > >Android TextView 自定義ClickableSpan實現@ 超連結

Android TextView 自定義ClickableSpan實現@ 超連結

Textview能滿足簡單的文字展示,其中可以設定自動索引連結,郵箱等。但有時候我們需要對TextView進行更豐富的展現原本的就很難滿足需求。例如各種標註,特殊文字高亮,關鍵字連結。
    專案中需要用到對@使用者的連結。所以樓主就去研究了一下Textview。結果發現使用Spannable介面能很好的實現對textview的拓展。而且android SDK提供了很多實現類。 先看一下如下程式碼 //建立一個 SpannableString物件 SpannableString sp = new SpannableString(“谷歌超連結、高亮顯示、高亮1、高亮2、斜體、下劃線.”); //設定超連結
sp.setSpan(new URLSpan(“http://www.google.com”), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //設定高亮樣式一 sp.setSpan(new BackgroundColorSpan(Color.RED), 11, 14, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //設定高亮樣式二 sp.setSpan(new ForegroundColorSpan(Color.YELLOW), 15, 18, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //設定斜體 sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 19, 21, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//設定下劃線 sp.setSpan(new UnderlineSpan(), 22, 25, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); sdk裡面提供了很多span你可以使用。下面說一下樓主需要微博@高亮實現 ClickableSpan 從名字就會發現這是一個響應文字點選的span,這是一個抽象類,你需要實現該類的onclick方法程式碼如下: 你也可以複寫updateDrawState方法對文字的外觀進行一點修改。 class WeiboAtClickSpan extends ClickableSpan {
@Override public void onClick(View arg0) {
//響應文字點選事件 }
@Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); //設定沒有下劃線 ds.setUnderlineText(false); //設定顏色高亮 ds.setARGB(255, 0, 71, 112); }
} 當然使用方法跟上面的示例程式碼一樣給textview設定span,通過setspan的引數你可以發現要指定startindex和endindex,這樣我們就可以在一段文字中通過制定的start和end給這段文字的不同位置設定span。從而就可以組合出豐富的textview展現了。當然edittext也支援這些介面,下面讀者就自己去製造輪子吧。 當然最後不要忘了給textview設定值 //  SpannableString物件設定給TextView spannableTextView.setText(sp); //  設定TextView中的超連結可點選 spannableTextView.setMovementMethod(LinkMovementMethod.getInstance());