SpannableString 來改變textView中http協議,手機號,已經你想要改變的字的顏色,以及添加onClick事件

來源:互聯網
上載者:User

標籤:textview   http協議   string   

這是我自己封的倆個類,只要調用就能使用,相當簡單:



package com.example.spanable_textview;


import java.util.regex.Matcher;
import java.util.regex.Pattern;


import com.example.spanable_textview.MainActivity.spannableListener;

//這個類是擷取SpannableString對象,以及添加顏色,跟點擊事件的


import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.view.View.OnClickListener;


public class getSpannableString{
/**
 * 
 * @param s    textView的內容
 * @param str  你所要改變的字串,其實主要是要的他的長度
 * @param start_  開始的位置
 * @param listener  監聽器
 * @return
 */
//這個是你所要改變的內容
public static SpannableString getClickableSpan(CharSequence s, String str,int start_,OnClickListener listener) {


int start = start_;
int end = str.length();


SpannableString spanableInfo = new SpannableString(s);


spanableInfo.setSpan(new Clickable(listener),
start, end+start, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
spanableInfo.setSpan(Color.BLUE, start, end+start,
Spanned.SPAN_EXCLUSIVE_INCLUSIVE);

return spanableInfo;
}
//這個是網路
public static  SpannableString  getClickableHttpSpan (CharSequence charSequence,OnClickListener listener){


SpannableString spanableInfo = new SpannableString(charSequence);
Pattern  pattern  =Pattern.compile("((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\[email protected]#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\[email protected]#$%^&*+?:_/=<>]*)?)");
Matcher  matcher =pattern.matcher(charSequence);
if (matcher.find()) {

System.out.println("start="+matcher.start());
System.out.println("end=="+matcher.end());
spanableInfo.setSpan(new Clickable(listener), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spanableInfo.setSpan(new ForegroundColorSpan(Color.BLUE), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  
}


return spanableInfo;
}
//這是手機號
public static SpannableString  getClickablePhoneSpan(CharSequence  charSequence, OnClickListener listener){
SpannableString  spannableString  =new SpannableString(charSequence);

Pattern  pattern = Pattern.compile("(\\(86\\))?(13[0-9]|15[0-35-9]|18[0125-9])\\d{8}");
Matcher  matcher  =pattern.matcher(charSequence);
if (matcher .find()) {
spannableString.setSpan(new Clickable(listener), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString .setSpan(new ForegroundColorSpan(Color.BLUE), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

}
return  spannableString; 
}
}





還有一個ClickableSpan的實作類別,主要是為了實現點擊鮮果

package com.example.spanable_textview;


import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.view.View;
import android.view.View.OnClickListener;


class Clickable extends ClickableSpan implements OnClickListener {
private final View.OnClickListener mListener;


public Clickable(View.OnClickListener l) {
mListener = l;


}


@Override
public void onClick(View v) {
mListener.onClick(v);


}


@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ds.linkColor);
ds.setUnderlineText(false); // 去掉底線
}


}

這裡有我的demo。有興趣的可以看看http://download.csdn.net/download/u012808234/8356749

SpannableString 來改變textView中http協議,手機號,已經你想要改變的字的顏色,以及添加onClick事件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.