Android 自定义TextView超链接

http://www.dewen.org/q/1744

ndroid 自定义TextView超链接

  • JK

    1 票

  • JK
    410

目标效果

  1. 例如微博,点击@Xxx时打开用户首页,而#Xxxx#是打开话题页面
  2. 但是,要保留系统默认的style(默认下划线+蓝色字体),而且长按时,可以复制
  3. 如果是邮件超链接,如何在打开邮件应用时,预先输入部分内容/模板
JK
编辑于 2012-02-22
评论 (1) •   •  链接 •  2012-02-22 
  • 0
    对TextView内容根据关键字进行过滤,点击带“@”的直接响应用户首页,其他情况另外的处理; –  吴绩伟  2012-02-22
2个答案

试试这两个方法

       
       
  1. TextView location = (TextView) findViewById(R.id.location);
  2. location.setMovementMethod(LinkMovementMethod.getInstance());
  3. Spannable spans = (Spannable) location.getText();
  4. ClickableSpan clickSpan = new ClickableSpan() {
  5. @Override
  6. public void onClick(View widget)
  7. {
  8. //put whatever you like here, below is an example
  9. AlertDialog.Builder builder = new Builder(MainActivity.this);
  10. builder.setTitle("Location clicked");
  11. AlertDialog dialog = builder.create();            
  12. dialog.show();
  13. }
  14. };
  15. spans.setSpan(clickSpan, 0, spans.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  16. TextView t3 = (TextView) findViewById(R.id.text3);
  17. t3.setText(
  18. Html.fromHtml(
  19. "<b>text3:</b>  Text with a " +
  20. "<a href=\"http://www.google.com\">link</a> " +
  21. "created in the Java source code using HTML."));
  22. t3.setMovementMethod(LinkMovementMethod.getInstance());
  23. TextView textView = (TextView) findViewById(R.id.TextBox);
  24. textView.setMovementMethod(LinkMovementMethod.getInstance());
  25. textView.setText(Html.fromHtml(strText));
  26. //e-mail的字符串内容
  27. <a href="mailto:my@email.com">my@email.com</a>

去掉下划线的方法

       
       
  1. email.setText(c.getString(5));
  2. website.setText(c.getString(6));
  3. Linkify.addLinks(email, Linkify.ALL);
  4. Linkify.addLinks(website, Linkify.ALL);
  5. private void stripUnderlines(TextView textView) {
  6. Spannable s = (Spannable)textView.getText();
  7. URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
  8. for (URLSpan span: spans) {
  9. int start = s.getSpanStart(span);
  10. int end = s.getSpanEnd(span);
  11. s.removeSpan(span);
  12. span = new URLSpanNoUnderline(span.getURL());
  13. s.setSpan(span, start, end, 0);
  14. }
  15. textView.setText(s);
  16. }

需要重定义urlspan

       
       
  1. private class URLSpanNoUnderline extends URLSpan {
  2. public URLSpanNoUnderline(String url) {
  3. super(url);
  4. }
  5. @Override public void updateDrawState(TextPaint ds) {
  6. super.updateDrawState(ds);
  7. ds.setUnderlineText(false);
  8. }
  9. }
小飞
小飞
6817
编辑于  2012-03-02
评论 (1) •  链接 • 2012-02-22
  • 0
    第一个方法即可满足。谢谢 –  JK  2012-02-22
       
       
  1. package com.zhou.activity;    
  2. import android.app.Activity;  
  3. import android.graphics.Color;  
  4. import android.os.Bundle;  
  5. import android.text.Spannable;  
  6. import android.text.SpannableString;  
  7. import android.text.Spanned;  
  8. import android.text.method.LinkMovementMethod;  
  9. import android.text.style.BackgroundColorSpan;  
  10. import android.text.style.ForegroundColorSpan;  
  11. import android.text.style.StyleSpan;  
  12. import android.text.style.URLSpan;  
  13. import android.widget.TextView;    
  14. public class TextViewLinkActivity extends Activity {      
  15. TextView myTextView;      
  16. @Override      
  17. public void onCreate(Bundle savedInstanceState) {          
  18. super.onCreate(savedInstanceState);          
  19. setContentView(R.layout.main);  
  20. myTextView = (TextView) this.findViewById(R.id.myTextView);                      
  21. //创建一个 SpannableString对象          
  22. SpannableString sp = new SpannableString("这句话中有链接,有高亮显示,这样,或者这样,还有斜体.");          
  23. //设置超链接          
  24. sp.setSpan(new URLSpan("http://www.abc.com"), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);          
  25. //设置高亮样式一          
  26. sp.setSpan(new BackgroundColorSpan(Color.RED), 17 ,19,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);          
  27. //设置高亮样式二          
  28. sp.setSpan(new ForegroundColorSpan(Color.YELLOW),20,24,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
  29. //设置斜体          
  30. sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 27, 29, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);          
  31. //SpannableString对象设置给TextView          
  32. myTextView.setText(sp);          
  33. 设置TextView可点击          
  34. myTextView.setMovementMethod(LinkMovementMethod.getInstance());      
  35. }  
  36.  }
小飞
小飞
6817
编辑于  2012-03-02
评论 (0) •  链接 • 2012-02-22

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值