web-dev-qa-db-fra.com

Comment rendre une adresse email cliquable?

J'ai un texte dans ma candidature qui dit que si vous avez besoin d'aide supplémentaire, envoyez-nous un e-mail et voici l'adresse e-mail, bla, bla.

Mais je veux qu’ils puissent cliquer sur le lien et avoir leur client de messagerie ouvert. Est-ce possible? Ou est-ce une mauvaise pratique?

Si c'est une pratique raisonnable, comment peut-on le faire?

35
GeekedOut

Cette demande est très raisonnable et la classe Linkify transformera chaque adresse électronique en un lien approprié. Ajoutez simplement l'attribut autoLink à votre XML:

<TextView
    ...
    Android:autoLink="email" />
86
Sam

Vous pouvez rendre votre texte cliquable en utilisant setOnClickListener sur le texte

textView.setOnClickListener(new View.OnClickListener());

Vous pouvez ouvrir le client de messagerie en créant une nouvelle intention avec ACTION_SEND. Settype, l'adresse email et le sujet comme ceci:

Intent emailintent = new Intent(Android.content.Intent.ACTION_SEND);
emailintent.setType("plain/text");
emailintent.putExtra(Android.content.Intent.EXTRA_EMAIL,new String[] {"[email protected]" });
emailintent.putExtra(Android.content.Intent.EXTRA_SUBJECT, "");
emailintent.putExtra(Android.content.Intent.EXTRA_TEXT,"");
startActivity(Intent.createChooser(emailintent, "Send mail..."));
8
Priebe

Vous devez déclencher une intention dans votre onClickListener:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain"); // send email as plain text
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));
5
Abdullah Jibaly

Veuillez noter qu'un petit bogue à partir de l'API 24 empêche la solution acceptée de fonctionner si la partie locale de l'adresse e-mail comporte exactement 2 caractères, tels que "[email protected]".

Voir le numéro: https://issuetracker.google.com/issues/64435698

Apparemment réparé déjà, mais apparemment pas encore déployé. (Vous n'aimez pas qu'ils connaissent le problème et ne se soucient même pas de mettre à jour la documentation en conséquence? https://developer.Android .com/référence/Android/widget/TextView.html # attr_Android: autoLink )

Donc, à moins que vous ne soyez sûr de ne pas avoir affaire à de telles adresses e-mail à 2 lettres, vous devriez plutôt utiliser l'approche acceptée à partir d'ici pour le moment:

TextView pour envoyer un email lorsque vous cliquez dessus

Prenez soin de supprimer l'attribut autolink de TextView ensuite.

2
Thomas

La réponse acceptée peut fonctionner pour les e-mails, mais si vous souhaitez détecter différents modèles tels que les e-mails, les numéros de contact, les liens Web et définir une implémentation distincte au clic pour ces modèles, je vous suggère d'utiliser CustomClickableEmailPhoneTextview

 enter image description here

Exemple de code pour utiliser la bibliothèque.

CustomPartialyClickableTextview customPartialyClickableTextview= (CustomPartialyClickableTextview) findViewById(R.id.textViewCustom);

                /**
                 * Create Objects For Click Patterns
                 */
                ClickPattern email=new ClickPattern();
                ClickPattern phone=new ClickPattern();
                ClickPattern weblink=new ClickPattern();

                /**
                 * set Functionality for what will happen on click of that pattern
                 * In this example pattern is email
                 */
                email.setOnClickListener(new ClickPattern.OnClickListener() {
                    @Override
                    public void onClick() {

                        Toast.makeText(MainActivity.this,"email clicked",Toast.LENGTH_LONG).show();


                    }
                });

                /**
                 * set Functionality for what will happen on click of that pattern
                 * In this example pattern is phone
                 */
                phone.setOnClickListener(new ClickPattern.OnClickListener() {
                    @Override
                    public void onClick() {
                        Toast.makeText(MainActivity.this,"phone clicked",Toast.LENGTH_LONG).show();

                    }
                });

                /**
                 * set Functionality for what will happen on click of that pattern
                 * In this example pattern is weblink
                 */
                weblink.setOnClickListener(new ClickPattern.OnClickListener() {
                    @Override
                    public void onClick() {
                        Toast.makeText(MainActivity.this,"website clicked",Toast.LENGTH_LONG).show();

                    }
                });

                /**
                 * set respective regex string to be used to identify patter
                 */
                email.setRegex("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b"); // regex for email
                phone.setRegex("[1-9][0-9]{9,14}"); // regex for phone number
                weblink.setRegex("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); // regex for weblink

                /**
                 * add click pattern to the custom textview - first parameter is tag for reference second parameter is ClickPattern object
                 */
                customPartialyClickableTextview.addClickPattern("email",email);
                customPartialyClickableTextview.addClickPattern("phone",phone);
                customPartialyClickableTextview.addClickPattern("weblink",weblink);
0
Nitin Jaiman