New UI-爲TextView設置超鏈接跳轉的三個方法
主要介紹的是如何爲TextView設置超鏈接,跳轉到瀏覽器,短信,撥號界面等
方法分別用三種:
①使用SpannableString來實現
②使用autoLink屬性來實現
③使用HTML的<a>標籤來實現
那麼開始本節的內容!
本節正文:
1.通過SpannableString設置超鏈接:
通過SpannableString來實現的,核心方法是:
setSpan (Object what, int start, int end, int flags)
主要看start與end,一個是字符的起始下標,從0開始算,end則是結束爲止,
包含起始位置,而不包含結束位置的字符哦!另外中英文都算一個字符!
示例代碼如下:
import android.app.Activity;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.URLSpan;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView=(TextView)findViewById(R.id.textView);
SpannableString mSpanableString=new SpannableString("百度搜索,撥打電話,發送短信,發送彩信,發送郵件,打開地圖");
mSpanableString.setSpan(new URLSpan("http://www.baidu.com"), 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//百度鏈接
mSpanableString.setSpan(new URLSpan("tel:10086"), 5, 9, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//電話
mSpanableString.setSpan(new URLSpan("sms:10086"), 10, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//短信
mSpanableString.setSpan(new URLSpan("mms:10086"), 15, 19, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//彩信
mSpanableString.setSpan(new URLSpan("mailto:[email protected]"), 20, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//郵箱
mSpanableString.setSpan(new URLSpan("geo:38.899533,-77.036476"), 25, 29, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//地圖
textView.setMovementMethod(LinkMovementMethod.getInstance()); //設置超鏈接 (需要添加setMovementMethod方法附加響應)通過方法LinkMovementMethod去調用實際的響應
textView.setText(mSpanableString);
}
}
運行截圖:
2.通過XML中的autoLink屬性來設置:
除了上面這種方法外,我們還可以在XML通過autoLink屬性來設置不同類型的超鏈接,用法如下:
all就是全部都包含,自動識別協議頭~
在Java代碼中可以調用setAutoLinkMask(Linkify.ALL);
這個時候可以不寫協議頭,autolink會自動識別,但是需要設置:
setMovementMethod(LinkMovementMethod.getInstance());
不然點擊了是不會跳轉的~
3.通過HTML中的<a>超鏈接來設置:
還有一種,就是通過html的<a>超鏈接標籤,代碼如下:
- //注意這裏必須加上協議號,即http://。否則,系統會以爲該鏈接是activity,而實際這個activity不存在,程序就崩潰。
- String html ="<a href='http://www.baidu.com'>百度一下</a>";
- CharSequence charSequence = Html.fromHtml(html);
- txtShow.setText(charSequence);
- txtShow.setMovementMethod(LinkMovementMethod.getInstance());