Lorsque j'utilise Android sur des sites Web et que je lis des e-mails, je remarque que je peux cliquer sur les adresses pour les charger dans Google Maps, sur les numéros de téléphone à appeler ou sur des e-mails pour envoyer un courrier électronique.
Ces éléments sur le Web sont formatés de différentes façons. Il existe donc une fonction intégrée qui détecte ce genre de choses.
Comment puis-je autoriser cela dans mon application? J'ai une page qui affiche les informations de contact en texte brut et j'aimerais que l'utilisateur puisse simplement cliquer.
Dois-je absolument créer des listes d'écoute pour chaque affichage de texte ou y a-t-il une fonction système à activer?
Android a un utilitaire expressément à cet effet: Linkify
TextView noteView = (TextView) findViewById(R.id.noteview);
noteView.setText(someContent);
Linkify.addLinks(noteView, Linkify.ALL);
Voir aussi: https://Android-developers.googleblog.com/2008/03/linkify-your-text.html
Utilisation
Android:autoLink="phone"
dans textView dans le fichier de mise en page XML
import Android.text.util.Linkify;
Linkify.addLinks(text, Linkify.PHONE_NUMBERS);
Vous pouvez l'utiliser dans TextView comme ceci,
Définir Android: autoLink = "phone" comme ci-dessous,
<TextView
Android:layout_width="fill_parent"
Android:id="@+id/text"
Android:layout_height="wrap_content"
Android:autoLink="phone"
Android:gravity="center"
Android:linksClickable="true"
Android:text="@string/txtCredits" />
Toutefois,
Pour une raison quelconque, le code ci-dessus ne fonctionne pas tout le temps. Alors, ajoutez ci-dessous le code aussi,
TextView textView = (TextView) findViewById(R.id.text);
textView.setMovementMethod(LinkMovementMethod.getInstance());
Si vous souhaitez détecter différents modèles tels que des e-mails, numéros de téléphone, 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);
Android:autoLink="phone"
travaillait pour moi sur tous les téléphones ... sauf Samsung . Par conséquent, j'ai choisi l'option suivante. Textes de numéros de téléphone transformés pour soutenir cliquer pour appeler :
<a href="tel:+4930123456789">+49 / 30 123456789</a>
puis utilisé cette méthode d'assistance statique pour ajouter la prise en charge des liens Web à TextViews
public static void linkifyTextViews(@NonNull TextView... textViews) {
for (TextView textView : textViews) {
Linkify.addLinks(textView, Linkify.WEB_URLS);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
}