如何为TextView中的文本/链接实现OnClick

时间:2014-07-30 11:14:55

标签: android textview onclicklistener

我有TextView,其中包含文字,链接和emailID,如ScreenShot所示:

image

我想实现它,以便当用户点击链接时,它应该打开浏览器并且EmailId打开SendMail。

我无法打开浏览器并发送电子邮件,但我想仅针对特定click实现text功能,即LinkEmailID TextView,而不是整个TextView

这可能吗?

3 个答案:

答案 0 :(得分:3)

您应该使用内置的linkify。阅读本教程,易于理解:

Linkify text link url in TextView text Android example

这些帖子也可以帮助您Android Linkify text - Spannable Text in Single Text View - As like Twitter tweet

Android: ClickableSpan in clickable TextView

以下是使用Spannable的完整代码:

final String webAddress = "www.123456.org";
final String emailAddress = "info@123456.com";
TextView text = (TextView)findViewById(R.id.textview);      

Spannable span = Spannable.Factory.getInstance().newSpannable("For more details on the app visit us at " + webAddress + " or write to us at " + emailAddress);   

ClickableSpan webClickSpan = new ClickableSpan() {  
    @Override
    public void onClick(View v) {  
         Uri uriUrl = Uri.parse("http://" + webAddress); 
         Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
         startActivity(launchBrowser);
    } };

ClickableSpan emailClickSpan = new ClickableSpan() {  
        @Override
        public void onClick(View v) {  
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("message/rfc822");
            intent.putExtra(Intent.EXTRA_EMAIL, new String[]{emailAddress});
            intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
            intent.putExtra(Intent.EXTRA_TEXT, "email body.");

            startActivity(Intent.createChooser(intent, "Send Email"));
        } };


 span.setSpan(webClickSpan, 40, 40 + webAddress.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

 span.setSpan(emailClickSpan, 73, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

 text.setText(span);

 text.setMovementMethod(LinkMovementMethod.getInstance());

答案 1 :(得分:2)

可以通过Spannable对象实现。 Spannable允许您为文本的一部分添加标记,并且还可以附加 ClickableSpan,当您按下跨度时会触发。

答案 2 :(得分:2)

使用Class Linkify:

Linkify.addLinks(yourTextView, Linkify.ALL);

或仅针对网址:

Linkify.addLinks(yourTextView, Linkify.WEB_URLS);