如何使EditText中的链接可点击?

15
我在Android上有一个EditText,希望其中嵌入的URL可被点击。我使用了Linkify类,已经将它们变为蓝色并加下划线。但是我无法弄清楚如何使它们可点击。 谢谢!

我想提一下,EditText链接默认情况下已经可以被点击 - 你只需要双击它们就可以打开一个特殊菜单。 - Bip901
4个回答

24

XML:

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

JAVA:

TextView textView = (TextView) findViewById(R.id.textViewId);
textView.setText(Html.fromHtml(html));
textView.setMovementMethod(LinkMovementMethod.getInstance());

4
对我来说这个不起作用。我尝试使用XML版本,但没有成功。文本看起来像链接,但无法点击。 - lowellk
你使用textView.setText(Html.fromHtml(html));吗? - Kamil Lelonek
你不需要使用 Linkify.addLinks(textView, Linkify.ALL); - Kamil Lelonek
这真的有效!我错过了 setMovementMethod() 调用。 - lowellk
11
可以翻译为:“这适用于TextView,但问题是关于EditText的。” - Omar HossamEldin
etNote.movementMethod = LinkMovementMethod.getInstance() etNote.setLinkTextColor(Color.parseColor("#077641")) - sandip

22
为了编辑文本,我成功地使链接可点击,方法如下:首先按照这里的描述实现一个自定义的MovementMethod。

Java

(从xml或上下文中创建您的EditText)

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

        }
    });

1
这很完美。有没有办法实现它来检测电话号码并将其突出显示? - user1889890
3
是的,@Collinux,Linkify 类支持 4 种类型:网址、电话号码、电子邮件和地图地址。 - pleonasmik
请注意,如果我们打算使用自定义的“CustomMovementMethod”,则应该使用 setLinksClickable(false); - Cheok Yan Cheng

0
希望这能帮助到有需要的人。
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)

0
XML - 在你的EditText中写入它
android:autoLink="web"
android:inputType="textWebEditText"

你可以通过以下方式显著改善你的回答:(1) 将代码格式化为 code,即用反引号括起来;(2) 详细阐述你的 XML 和 Java/Kotlin 代码之间的联系以及实际使其工作的步骤;(3) 解释你的方法如何改进 Kamil's answer,该回答发布于2013年。 - Valentin Kuhn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接