Ответ 1
Отъезд Linkify
Когда я использую android на веб-сайтах и читаю электронные письма, я замечаю, что я могу щелкнуть по адресам для загрузки на карты Google или щелкнуть по номерам телефонов, чтобы позвонить или щелкнуть по электронной почте и отправить электронное письмо.
Эти элементы в Интернете отформатированы различными способами, поэтому существует некоторая встроенная функция, которая обнаруживает подобные вещи.
Как мне разрешить это в моем приложении? У меня есть страница, которая отображает контактную информацию в виде обычного текста, и я хотел бы, чтобы пользователь просто мог щелкнуть.
Нужно ли мне создавать кликнификаторы для каждого текстового поля или есть системная функция, которую мне просто нужно включить?
Отъезд Linkify
Используйте
android:autoLink="phone"
в textView в файле макета xml
import android.text.util.Linkify;
Linkify.addLinks(text, Linkify.PHONE_NUMBERS);
Вы можете создавать регулярные выражения для каждого типа данных, которые вы хотите сделать интерактивными. Я точно не знаю, как выглядит номер телефона в вашей стране. Это для соответствия телефонных номеров в моей стране. Например:
String PHONE_REGEX = "([0-9]{3}[\\./ ]?(([0-9]{2}[\\./ ]?[0-9]{2}[\\./ ]?[0-9]{2})|({[0-9]{3}[\\./ ]?[0-9]{3})))"
String yourHTML = "This is my phone number: 053 12 34 56."
// Underline and make Bold
yourHTML = yourHTML.replaceAll(PHONE_REGEX, "<b><u>$1</u></b>");
Если вы хотите обнаружить различные шаблоны, такие как электронные письма, контактные номера, веб-ссылку и установить отдельные реализации щелчков для этих шаблонов, я предлагаю вам использовать 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);
android:autoLink="phone"
работал у меня на всех телефонах... кроме Samsung. Поэтому я выбрал следующий вариант. Преобразованные тексты телефонных номеров для поддержки нажмите, чтобы позвонить:
<a href="tel:+4930123456789">+49 / 30 123456789</a>
а затем использовал этот статический вспомогательный метод для добавления поддержки веб-ссылок в мои текстовые элементы
public static void linkifyTextViews(@NonNull TextView... textViews) {
for (TextView textView : textViews) {
Linkify.addLinks(textView, Linkify.WEB_URLS);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
}
Вы можете использовать его в TextView, как это,
Установите андроид: autoLink = "телефон" , как показано ниже,
<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" />
Однако
По какой-то причине выше код не работает все время. Итак, добавьте ниже код,
TextView textView = (TextView) findViewById(R.id.text);
textView.setMovementMethod(LinkMovementMethod.getInstance());