首页 > 代码库 > android假设给TextView或EditText的email链接加下划线,并在点击在email连接上能够弹框显示

android假设给TextView或EditText的email链接加下划线,并在点击在email连接上能够弹框显示

怎样把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 {
		EMAIL
	}

	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();
	}

}

<span style="white-space:pre">	</span>TextView textView = (TextView)findViewById(R.id.textview);
		String str = "$#%$%$%$fsdfsddsfsdf@163.com&*&*DFDF152152@1255.com";
		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[.-]]+@[\\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);
	        }
   }
   

效果图:

技术分享

android假设给TextView或EditText的email链接加下划线,并在点击在email连接上能够弹框显示