zoukankan      html  css  js  c++  java
  • 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);
    	        }
       }
       

    效果图:


  • 相关阅读:
    2016年3月17日----Javascript的正则表达式
    2016年3月17日----Javascript的时间与日期
    2016年3月9日----Javascript的对象和数组
    2016年3月8日----Javascript的函数
    2016年3月7日----Javascript的运算符
    2016年3月7日----Javascript的数据类型
    2016年3月1日----Javascript的数组元素的添加、移除以及其他常用方法
    console深入理解
    浏览器特性和安全策略
    每日新知
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6852866.html
Copyright © 2011-2022 走看看