2012-05-05 18 views
30

Ho un testo nella mia applicazione che dice che nel caso abbiate bisogno di ulteriore aiuto, scriveteci e qui c'è l'indirizzo email, blah, blah.Come rendere un indirizzo e-mail selezionabile?

Ma voglio che siano in grado di fare clic sul collegamento di posta elettronica e di aprire il proprio client di posta elettronica. È possibile? O è una cattiva pratica?

Se è una pratica ragionevole, come può essere fatto?

risposta

74

Questa è una richiesta molto ragionevole e la classe Linkify sarà trasformare ogni indirizzo di posta elettronica in un collegamento appropriato per voi. È sufficiente aggiungere l'attributo autoLink al XML:

<TextView 
    ... 
    android:autoLink="email" /> 
+1

La migliore soluzione ... troverà automaticamente gli indirizzi e-mail nel tuo 'TextView', quindi potresti inserire un paragrafo nel testo se lo desideri e convertirà automaticamente tutti gli indirizzi e-mail. –

4

È necessario sparare un intento nel vostro 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, "")); 
6

potete fare il vostro cliccabile testo utilizzando setOnClickListener sul testo

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

È possibile aprire il client di posta elettronica con la creazione di una nuova intenti con l'ACTION_SEND. Settype, l'indirizzo e l'oggetto come questo:

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...")); 
+0

Questo non risponde alla domanda, poiché l'intero 'TextView' sarà cliccabile. Solo l'indirizzo email dovrebbe essere un link. –

0

La risposta accettata può funzionare per le email, ma se si vuole rilevare diversi modelli come le email, numeri di telefono, link web e impostare un separato su implementazioni click per questi modelli I suggerisco di utilizzare CustomClickableEmailPhoneTextview

enter image description here

Codice di esempio per utilizzare la libreria.

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._%+-][email protected][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); 
2

Si prega di essere a conoscenza di un piccolo bug da API 24 in poi, che rende la soluzione accettata non funzionare se la parte locale dell'indirizzo di posta elettronica ha esattamente 2 caratteri come "[email protected]".

vedere la questione: https://issuetracker.google.com/issues/64435698

asseriscono fissati già, ma a quanto pare non ancora srotolato. (Non ti piace sapere che conoscono il problema e non preoccuparti nemmeno di aggiornare la documentazione di conseguenza? https://developer.android.com/reference/android/widget/TextView.html#attr_android:autoLink)

Quindi, a meno che tu non sia sicuro di non avere a che fare con tale e-mail a 2 lettere indirizzi, si dovrebbe invece usare il metodo accettato da qui, per il momento:

TextView to send email when clicked

Fare attenzione a rimuovere l'attributo autolink dal TextView poi.

Problemi correlati