Android TextView自定義實現@用戶跳轉
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 {
@Overridepublic void onClick(View arg0) {//響應文字點擊事件}
@Overridepublic 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());