给TextView中的部分文本添加链接的两种方式

来源:互联网 发布:淘宝达人大v认证包过 编辑:程序博客网 时间:2024/06/05 07:12

方式一:在布局文件中给TextView制定autoLink属性,例如:

    <TextView         android:id="@+id/tv2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:autoLink="email"        android:layout_marginTop="30dp"        android:text="你好www.baidu.com是的吗"/>

其中autoLink的属性值包括none,web,email,phone,map,all,这些属性值都是自动识别的,不用做任何处理
另外,对于autoLink属性,我们也可以在java代码中指定:
tv.setAutoLinkMask(Linkify.WEB_URLS);

方式二:通过java代码自定义链接,添加单击事件

public class MainActivity extends ActionBarActivity{    private int systemVersion;    private  TextView  tv;      static  Context ctx = null ;@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_linearlayout);        ctx = this ;          tv  =  (TextView) findViewById(R.id.tv);             String htmlLinkText=           "麻烦请<a href='aaa'>点击</a>这里的高规格的奋斗奋斗粉丝粉丝都刚刚<a href='bbb'>三国杀</a>广东省三国杀的广东分公司对该公司对刚刚SD敢达干豆腐";                tv.setText(Html.fromHtml(htmlLinkText));  //将字符串格式化成html文本        tv.setMovementMethod(LinkMovementMethod.getInstance());//使TextView可以执行链接   //        tv.setAutoLinkMask(Linkify.WEB_URLS);        CharSequence text  =  tv.getText();              if (text instanceof Spannable){                  int  end  =  text.length();                 Spannable sp  =  (Spannable)tv.getText();              //获取textView中的多个链接组成数组            URLSpan[] urls = sp.getSpans( 0 , end, URLSpan. class );                  SpannableStringBuilder style = new  SpannableStringBuilder(text);                 style.clearSpans(); // should clear old spans                   for (URLSpan url : urls){                     MyURLSpan myURLSpan  =   new  MyURLSpan(url.getURL());                 //给链接设置样式等,例如链接处的下划线,字体颜色等,及其单击事件的添加                style.setSpan(myURLSpan,sp.getSpanStart(url),sp.getSpanEnd(url),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);                 }                 tv.setText(style);             }     }private   static   class  MyURLSpan extends ClickableSpan{                     private  String mUrl;            MyURLSpan(String url) {                mUrl  = url;            }            @Override          public void onClick(View widget) {              //  TODO Auto-generated method stub          //当textView中有多个连接要执行时,可以根据mUrl来区分是哪一个链接没单击了,例如这里的两个链接分别是aaa和bbb           Toast.makeText(ctx,  " hello! "+mUrl ,Toast.LENGTH_LONG).show();         }        } }


0 0