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

    效果图:


  • 相关阅读:
    typedef
    心目中的编程高手
    截取包含多字节字符的字符串
    Start deltacat Audio Mix Filter
    关于编译环境和DLL的惨痛教训
    【转】自定义Extjs中Grid单元格的显示格式
    Ajax 按需 提交指定字段 以 Json Model 形式 post 到 action
    [转]Log4Net 非常完整的配置。
    【转】Ext.data.Store
    this.getColumnModel is not a function Extjs 如何解决呢? Extjs 导出 到Excel 解决方案问题
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6852866.html
Copyright © 2011-2022 走看看