web-dev-qa-db-fra.com

Android rendre les numéros de téléphone cliquables, autodetect

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?

26
CQM

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

21
zienkikk

Utilisation

Android:autoLink="phone"

dans textView dans le fichier de mise en page XML

54
Amt87
import Android.text.util.Linkify;

Linkify.addLinks(text, Linkify.PHONE_NUMBERS);
17
Keith Maurino

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());
2
Yuvraj Pandey

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

 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
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());
    }
}
0
Nino Handler