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

方式一:在布局文件中给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();  
       }     
   } 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值