2012-05-05 18 views
30

Tengo un texto en mi solicitud que dice que en caso de que necesite ayuda adicional, envíenos un correo electrónico y aquí está la dirección de correo electrónico, bla, bla.¿Cómo hacer que se haga clic en una dirección de correo electrónico?

Pero quiero que puedan hacer clic en el enlace de correo electrónico y tener abierto su cliente de correo electrónico. ¿Es eso posible? ¿O es mala práctica?

Si es una práctica razonable, ¿cómo se puede hacer?

Respuesta

74

Esta es una petición muy razonable y la clase Linkify se volverá cada dirección de correo electrónico en un enlace adecuado para usted. Basta con añadir el atributo autoLink a su XML:

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

La mejor solución ... encontrará automáticamente las direcciones de correo electrónico en su 'TextView', por lo que podría poner un párrafo en el texto si lo deseara y convertiría automáticamente todas las direcciones de correo electrónico. –

4

Necesitas disparar una intención en su 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

Usted puede hacer su hacer clic en el texto mediante el uso de setOnClickListener en el texto

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

Puede abrir el cliente de correo electrónico mediante la creación de una nueva intención con la ACTION_SEND. Settype, la dirección de correo electrónico y sujeto de esta manera:

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

Eso no responde la pregunta, ya que se podrá hacer clic en todo el 'TextView'. Solo la dirección de correo electrónico debe ser un enlace. –

0

La respuesta aceptada puede funcionar para mensajes de correo electrónico, pero si quieres para detectar diferentes patrones como mensajes de correo electrónico, números de contacto, web link y establecer un aparte sobre implementaciones clic para estos patrones I sugerimos utilizar CustomClickableEmailPhoneTextview

enter image description here

Código de ejemplo para utilizar la biblioteca.

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

Por favor, tenga en cuenta de un pequeño error de API de 24 en adelante que hace que la solución aceptada no funcionar si la parte local de la dirección de correo electrónico tiene exactamente 2 caracteres como "[email protected]".

Ver el tema: https://issuetracker.google.com/issues/64435698

Supuestamente ya fijado, pero al parecer no lanzado aún. (¿No te encanta que sepan sobre el problema y ni siquiera te molestes en actualizar la documentación en consecuencia? https://developer.android.com/reference/android/widget/TextView.html#attr_android:autoLink)

Así que a menos que estés seguro de que no estás tratando con ese correo electrónico de 2 letras direcciones, se debería utilizar el enfoque aceptado de aquí por el momento:

TextView to send email when clicked

Tenga cuidado para quitar el atributo autolink de la Vista de Texto a continuación.

Cuestiones relacionadas