Ответ 1
Это очень разумный запрос, а класс Linkify
превратит каждый адрес электронной почты в соответствующую ссылку для вас. Просто добавьте атрибут autoLink
в ваш XML:
<TextView
...
android:autoLink="email" />
У меня есть текст в моем приложении, в котором говорится, что если вам нужна дополнительная помощь, напишите нам, и вот адрес электронной почты: blah, blah.
Но я хочу, чтобы они могли щелкнуть ссылку по электронной почте и открыть свой почтовый клиент. Это возможно? Или это плохая практика?
Если это разумная практика, как это можно сделать?
Это очень разумный запрос, а класс Linkify
превратит каждый адрес электронной почты в соответствующую ссылку для вас. Просто добавьте атрибут autoLink
в ваш XML:
<TextView
...
android:autoLink="email" />
Вы можете сделать свой текст нажав, используя 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..."));
Вам нужно запустить намерение в 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, ""));
Обратите внимание на небольшую ошибку из 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.
Принятый ответ может работать для электронных писем, но если вы хотите обнаружить различные шаблоны, такие как электронные письма, контактные номера, веб-ссылку и установить отдельные реализации кликов для этих шаблонов, я предлагаю вам использовать 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);