Android TextView 中實現(xiàn)部分文字變色以及點擊事件

  • 首先要想實現(xiàn)文字變色以及點擊,都需要使用到SpannableStringBuilder,實例化該類也很簡單,只需將你想要處理的字符串當做參數(shù)
SpannableStringBuilder spannable = new SpannableStringBuilder(content);
  • 那么下邊便是開始實現(xiàn)文字變色了,調(diào)用SpannableStringBuilder的setSpan方法,該方法有四個參數(shù):
  • 你要設置的顏色
  • 需要變色文字開始的Index
  • 需要變色文字結(jié)束的index
  • 這個參數(shù)描述文字較多,我就不贅述了點擊查看
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這個方法,但第一個參數(shù)換成我們繼承ClickableSpan類的實例化,其它三個參數(shù)同上,需要注意的是setMovementMethod這個方法一定要記得設置,不然點擊是不會生效的
//這個一定要記得設置,不然點擊不生效
textView.setMovementMethod(LinkMovementMethod.getInstance());
spannable.setSpan(new TextClick(),startIndex,endIndex , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  • 那么接下來出現(xiàn)了一個問題,我既要讓文字可點擊,但是又要指定它的顏色該怎么辦呢。我們查看ClickableSpan的源碼會發(fā)現(xiàn),它除了onClick之外,還有updateDrawState
@Override 
public void updateDrawState(TextPaint ds) { 
    ds.setColor(ds.linkColor); 
    ds.setUnderlineText(true); 
}
  • 它的實現(xiàn)很簡單,一目了然,就是設置文字顏色以及是否有下劃線。那么這個問題就迎刃而解了,在我們的TextClick重寫updateDrawState,即是
private class TextClick extends ClickableSpan{ 
@Override 
public void onClick(View widget) { 
     //在此處理點擊事件
 } 
@Override
 public void updateDrawState(TextPaint ds) { 
      ds.setColor(Color.RED);
    } 
}
  • 下邊加一張簡單的效果圖
  • 至此,問題就全部解決了!
  • Demo 下載地址

補充:關于想去掉點擊后文字背景,設置一下HighlightColor即可android:textColorHighlight="#00ffffff"textView.setHighlightColor(Color.parseColor("#00ffffff"));

PS:如果后續(xù)有時間,我會封裝一個該功能的控件放上來。

時隔3年后續(xù)來了 =-=

已發(fā)布library
詳見github
https://github.com/CuiZhaoHui/SpannableHelper

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容