Android делает номера телефонов кликабельными, автоопределение - PullRequest
28 голосов
/ 27 июня 2011

Когда я использую Android на веб-сайтах и ​​читаю электронную почту, я замечаю, что могу нажимать на адреса, чтобы загрузить их в карты Google, или нажимать на номера телефонов, чтобы позвонить, или нажимать на электронные письма и отправлять электронную почту.

Эти элементы в сети отформатированы различными способами, поэтому есть некоторая встроенная функция, которая обнаруживает подобные вещи.

Как мне разрешить это в моем приложении? У меня есть страница, которая отображает контактную информацию в виде обычного текста, и я хотел бы, чтобы пользователь мог просто нажимать.

Нужно ли мне создавать списки кликов для каждого просмотра текста, или мне просто нужно включить системную функцию?

Ответы [ 6 ]

58 голосов
/ 20 марта 2013

Используйте

android:autoLink="phone"

в textView в файле макета xml

22 голосов
/ 27 июня 2011

В Android есть специальная утилита для этой цели: Linkify

TextView noteView = (TextView) findViewById(R.id.noteview);
noteView.setText(someContent);
Linkify.addLinks(noteView, Linkify.ALL);

См. Также: https://android -developers.googleblog.com / 2008/03 / linkify-ваш-text.html

18 голосов
/ 02 июля 2012
import android.text.util.Linkify;

Linkify.addLinks(text, Linkify.PHONE_NUMBERS);
3 голосов
/ 27 ноября 2017

Вы можете использовать его в TextView следующим образом:

Установить android: autoLink = "phone" , как показано ниже,

<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());
1 голос
/ 14 февраля 2017
android:autoLink="phone"

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

<a href="tel:+4930123456789">+49 / 30 123456789</a>

, а затем использовали этот статический вспомогательный метод для добавления поддержки веб-ссылок в мои TextViews

public static void linkifyTextViews(@NonNull TextView... textViews) {
    for (TextView textView : textViews) {
        Linkify.addLinks(textView, Linkify.WEB_URLS);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }
}
0 голосов
/ 18 ноября 2016

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

enter image description here

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

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