如何在Android的布局xml中添加电子邮件链接

3

我有一个XML文件,用于在我的应用程序中显示关于AlertDialog的信息。我能够从文本资源中获取一段文本,并在文本右侧添加图片。现在我需要将支持电子邮件和可能的主页网址添加到文本中。但是我需要它们可以被点击。因此,单击电子邮件将发送电子邮件,单击网站将打开浏览器。如何添加这些链接文本?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" android:weightSum="1" android:orientation="horizontal" android:baselineAligned="true">
    <TextView android:text="@string/AboutString" android:layout_gravity="center_horizontal" android:id="@+id/textView1" android:layout_height="173dp" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:drawableRight="@drawable/explain"></TextView>
</LinearLayout>

编辑:我选择的解决方案是:

                View layout = inflater.inflate(R.layout.about, null);
                Pattern p = Pattern.compile("somemail@domain.net");
                String Scheme = "mailto:somemail@domain.net";
                Linkify.addLinks((TextView)layout.findViewById(R.id.textView1), p, Scheme);
4个回答

4

您需要使用linkify将文本链接化。以下是该文章的示例,展示了如何在发现WikiWord时添加链接:

Pattern wikiWordMatcher = Pattern.compile("\\b[A-Z]+[a-z0-9]+[A-Z][A-Za-z0-9]+\\b");
String wikiViewURL =    "content://com.google.android.wikinotes.db.wikinotes/wikinotes/";
Linkify.addLinks(noteView, wikiWordMatcher, wikiViewURL);

1
你需要像这样的东西无耻的插件https://github.com/ariefbayu/Clickable-URL-TextView-Example 基本上,你需要将你的TextView设置为:
<TextView
  android:id="@+id/textView2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="TextView"
  android:clickable="true" />

on onCreate:

html.append("<a href='lauch.TCActivity://SENDEMAIL?email=mail@example.com&subject=email subject&body=this is email body'>Email</a>");
textView.setClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());

并在TCActivity中处理它:

if(data.getHost().equals("SENDEMAIL")){
    Log.i("LOG", "Email:" + data.getQueryParameter("email"));
    Log.i("LOG", "Subject:" + data.getQueryParameter("subject"));
    Log.i("LOG", "Body:" + data.getQueryParameter("body"));
}

就是这样。现在你应该知道接下来该做什么了。

请参见:


我可以将此添加到字符串中: <a href="mailto:somemail@domain.com">somemail@domain.com</a> 但它只会将电子邮件颜色标记为链接,当我单击它时不会执行任何操作。也许如果我添加 clickable = true 它就会起作用。 基本上,我不想编写自己的发送电子邮件对话框,那是毫无意义的。是否有一种简单的方法来调用设备的默认邮寄方法? - user1097185
if(data.getHost().equals("SENDEMAIL")){} 内,按照 clue 的指示调用 Intent.ACTION_SEND - ariefbayu

1

对我来说很简单(使用SDK版本23。不确定此属性是否存在于较早的版本中)。在textview中添加autoLink="email",并在Strings.xml中提供电子邮件ID。这个电子邮件ID以蓝色链接的形式出现,并在点击后打开我们的电子邮件。请尝试并告诉我。

<string name="MailText">Click abc@gmail.com to send us a mail for any query</string>

<TextView
    android:id="@+id/mailtext"
    android:text="@string/MailText"
    android:autoLink="email"
    android:layout_height="wrap_content" />

0

Android的TextView有一个名为autoLink的属性,它接受几个参数之一是email,这将告诉框架在该textView中处理任何类型的电子邮件时可点击。

请按照以下示例操作:

<TextView
    ....
    android:text="youremail@gmail.com"
    android:autoLink = "email"
/>

1
虽然这段代码可能回答了问题,但提供有关它如何以及/或为什么解决问题的附加上下文将改善答案的长期价值。您可以在帮助中心找到有关编写良好答案的更多信息:https://stackoverflow.com/help/how-to-answer。祝你好运! - nima

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接