Android TextView 中實現部分文字變色以及點擊事件

#

首先要想實現文字變色以及點擊,都需要使用到SpannableStringBuilder,實例化該類也很簡單,只需將你想要處理的字符串當做參數

SpannableStringBuilder spannable = new SpannableStringBuilder(content);

#

那麼下邊便是開始實現文字變色了,調用SpannableStringBuilder的setSpan方法,該方法有四個參數:
你要設置的顏色
需要變色文字開始的Index
需要變色文字結束的index
這個參數描述文字較多

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,這是在 setSpan 時需要指定的 flag,它的意義我試了很久也沒試出來,睡個覺,今天早上才突然有點想法,試之,果然。它是用來標識在 Span 範圍內的文本前後輸入新的字符時是否把它們也應用這個效果。分別有 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前後都不包括)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,後面不包括)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,後面包括)、Spanned.SPAN_INCLUSIVE_INCLUSIVE(前後都包括)。
spannable.setSpan(newForegroundColorSpan(Color.RED),startIndex,endIndex,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

textView.setText(spannable);

接下來是指定文字的點擊事件設置,步驟與設置文字變色基本相同,只需要ClickableSpan這個類來處理點擊事件,我們先寫一個類,繼承ClickableSpan
private class TextClick extends ClickableSpan{ @Override public void onClick(View widget) { //在此處理點擊事件 } }
接下來又是setSpan這個方法,但第一個參數換成我們繼承ClickableSpan類的實例化,其它三個參數同上,需要注意的是setMovementMethod這個方法一定要記得設置,不然點擊是不會生效的

//這個一定要記得設置,不然點擊不生效
textView.setMovementMethod(LinkMovementMethod.getInstance());
spannable.setSpan(new TextClick(),startIndex,endIndex , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

那麼接下來出現了一個問題,我既要讓文字可點擊,但是又要指定它的顏色該怎麼辦呢。我們查看ClickableSpan的源碼會發現,它除了onClick之外,還有updateDrawState

@Override 
public void updateDrawState(TextPaint ds) { 
    ds.setColor(ds.linkColor); 
    ds.setUnderlineText(true); 
}

它的實現很簡單,一目瞭然,就是設置文字顏色以及是否有下劃線。那麼這個問題就迎刃而解了,在我們的TextClick重寫updateDrawState,即是

private class TextClick extends ClickableSpan{ 
@Override 
public void onClick(View widget) { 
     //在此處理點擊事件
 } 
@Override
 public void updateDrawState(TextPaint ds) { 
      ds.setColor(Color.RED);
    } 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章