怎样把textview的一些文字加上背景色:
Spannable str = new SpannableString("#fdsfdfsdfdsfd#");
Matcher matcher = getEmailPattern().matcher((CharSequence) str);
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
str.setSpan(new ForegroundColorSpan(0xFF1A5798), start, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
textView.setText(str);
假设在TextView上把email链接找出来并加上下划线:
写一个属性类继承ClickableSpan
public class MessageBundleSpan extends ClickableSpan {
public enum LinkType {
}
private String mText;
private MainActivity mActivity;
public MessageBundleSpan(MainActivity activity, String text) {
if (activity == null) {
throw new NullPointerException("activity is NULL");
}
mActivity = activity;
mText = text;
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(mActivity.getResources().getColor(
R.color.message_bundle_link));
ds.setUnderlineText(true);
}
@Override
public void onClick(View widget) {
new AlertDialog.Builder(mActivity).setTitle("Title").setMessage(mText)
.create().show();
}
}
TextView textView = (TextView)findViewById(R.id.textview);
String str = "$#%$%$%[email protected]&*&*[email protected]";
textView.setText(str);
SpannableStringBuilder stringBuilder = new SpannableStringBuilder(textView.getText());
applyRegexPattern(textView, stringBuilder, getEmailPattern(), MessageBundleSpan.LinkType.EMAIL);
textView.setText(stringBuilder, TextView.BufferType.SPANNABLE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
private static Pattern getEmailPattern() {
if (sharppattern == null)
sharppattern = Pattern.compile("[\\w[.-]][email protected][\\w[.-]]+\\.[\\w]+");
return sharppattern;
}
private void applyRegexPattern(TextView textView, SpannableStringBuilder stringBuilder, Pattern pattern, MessageBundleSpan.LinkType type) {
Matcher matcher = pattern.matcher(textView.getText().toString().toLowerCase());
while(matcher.find()) {
String text = textView.getText().toString().substring(matcher.start(), matcher.end());
stringBuilder.setSpan(new MessageBundleSpan(this, text), matcher.start(), matcher.end(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
}
效果图: