Android TextView自定義實現@用戶跳轉

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 {
@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());
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章