Подтвердить что ты не робот

Как сделать адрес электронной почты доступным?

У меня есть текст в моем приложении, в котором говорится, что если вам нужна дополнительная помощь, напишите нам, и вот адрес электронной почты: blah, blah.

Но я хочу, чтобы они могли щелкнуть ссылку по электронной почте и открыть свой почтовый клиент. Это возможно? Или это плохая практика?

Если это разумная практика, как это можно сделать?

4b9b3361

Ответ 1

Это очень разумный запрос, а класс Linkify превратит каждый адрес электронной почты в соответствующую ссылку для вас. Просто добавьте атрибут autoLink в ваш XML:

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

Ответ 2

Вы можете сделать свой текст нажав, используя setOnClickListener в тексте

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

Вы можете открыть почтовый клиент, создав новый Intent с ACTION_SEND. Settype, адрес электронной почты и тему:

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

Ответ 3

Вам нужно запустить намерение в 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, ""));

Ответ 4

Обратите внимание на небольшую ошибку из API 24, которая делает принятое решение недействительным, если локальная часть адреса электронной почты имеет ровно 2 символа, например "[email protected]".

См. проблему: https://issuetracker.google.com/issues/64435698

Предположительно исправлено уже, но, по-видимому, пока не покатано. (Вам не нравится, что они знают о проблеме, и даже не утруждают себя обновлением документации? https://developer.android.com/reference/android/widget/TextView.html#attr_android:autoLink)

Итак, если вы не уверены, что не имеете таких двухбуквенных адресов электронной почты, вы должны скорее использовать принятый подход отсюда:

TextView для отправки электронной почты при нажатии

Позаботьтесь, чтобы удалить атрибут autolink из TextView.

Ответ 5

Принятый ответ может работать для электронных писем, но если вы хотите обнаружить различные шаблоны, такие как электронные письма, контактные номера, веб-ссылку и установить отдельные реализации кликов для этих шаблонов, я предлагаю вам использовать CustomClickableEmailPhoneTextview

введите описание изображения здесь

Пример кода для использования библиотеки.

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);