Как я могу сделать ссылки в EditText кликабельными?

У меня есть EditText на Android, для которого я хотел бы, чтобы любые встроенные URL-адреса были интерактивными. Я использовал класс Linkify, который сделал их синими и подчеркнул. Однако я не могу понять, как на самом деле сделать их кликабельными.

Спасибо!


person lowellk    schedule 13.08.2013    source источник
comment
Я хотел бы отметить, что ссылки EditText по умолчанию уже активны — вам просто нужно дважды нажать на них, чтобы открыть специальное меню.   -  person Bip901    schedule 03.04.2021


Ответы (4)


XML:

 android:linksClickable="true"
 android:autoLink="web|email"

ДЖАВА:

TextView textView = (TextView) findViewById(R.id.textViewId);
textView.setText(Html.fromHtml(html));
textView.setMovementMethod(LinkMovementMethod.getInstance());
person Kamil Lelonek    schedule 13.08.2013
comment
Это не работает для меня. Я использовал версию XML без везения. Текст выглядит как ссылка, но не кликабельный. - person lowellk; 14.08.2013
comment
Вы используете textView.setText(Html.fromHtml(html));? - person Kamil Lelonek; 14.08.2013
comment
Тогда вам не нужно использовать Linkify.addLinks(textView, Linkify.ALL);. - person Kamil Lelonek; 14.08.2013
comment
Это действительно работает! Я пропустил звонок setMovementMethod(). - person lowellk; 29.08.2013
comment
Это работает для TextView, но вопрос для EditText - person Omar HossamEldin; 20.03.2014

Для редактирования текста мне удалось сделать ссылки доступными следующим образом. Сначала я реализовал пользовательский метод перемещения, как описано здесь

Джава

(Создайте текст редактирования из xml или контекста)

editText.setLinksClickable(true);
editText.setAutoLinkMask(Linkify.WEB_URLS);
editText.setMovementMethod(CustomMovementMethod.getInstance());
//If the edit text contains previous text with potential links
Linkify.addLinks(editText, Linkify.WEB_URLS);

Затем, чтобы управлять тем, что URL-адреса выглядят как ссылки, пока пользователь вводит

editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {


        }

        @Override
        public void afterTextChanged(Editable s) {

                Linkify.addLinks(s, Linkify.WEB_URLS);

        }
    });
person pleonasmik    schedule 29.07.2014
comment
Это потрясающе. Есть ли способ реализовать это с возможностью обнаружения телефонных номеров и выделения их? - person ; 23.08.2014
comment
Да, @Collinux, класс Linkify поддерживает 4 типа: Веб-ссылки , Номера телефонов, адреса электронной почты и карты - person pleonasmik; 25.08.2014
comment
Обратите внимание, что мы должны использовать setLinksClickable(false);, если мы намерены иметь собственный CustomMovementMethod. - person Cheok Yan Cheng; 17.09.2018

XML: -- Напишите это в своем тексте редактирования

Android: autoLink = "веб" android: inputType = "textWebEditText"

person Dawinder Singh    schedule 03.03.2020
comment
Вы можете значительно улучшить свой ответ, (1) отформатировав код как code, т. е. заключив код в обратные кавычки, (2) проработав связь между вашим кодом XML и Java/Kotlin и шагами для фактической работы, и (3) объясняя, как ваш подход улучшает ответ Камила от 2013 года. - person Valentin Kuhn; 03.03.2020

Надеюсь, это поможет кому-то

val message: String = String.format(
        getString(R.string.message_content),
        firstNameEditText.text,
        lastNameEditText.text,
        dateTextView.text,
        timeTextView.text
    )

    val gMapURL = getString(R.string.google_map_location)

    // Setup my Spannable with clickable URLs
    val spannable: Spannable = SpannableString(gMapURL)
    Linkify.addLinks(spannable, Linkify.WEB_URLS)

    // Append a zero-width space to the Spannable
    val gText = TextUtils.concat(spannable, "\u200B")

    val finalText = TextUtils.concat(message, gText)
    messageContentEditText.setText(finalText)
person vivek s    schedule 24.03.2020