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?
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..."));
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, ""));
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.
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
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);