【问题标题】:How can I make links in an EditText clickable?如何使 EditText 中的链接可点击?
【发布时间】:2013-08-13 21:29:59
【问题描述】:

我在 Android 上有一个 EditText,我希望任何嵌入的 URL 都可以点击。我使用了Linkify 类,它把它们变成了蓝色并加了下划线。但是,我无法弄清楚如何真正使它们可点击。

谢谢!

【问题讨论】:

  • 我想提一下,默认情况下,EditText 链接已经可以点击 - 您只需双击它们即可打开一个特殊菜单。

标签: android android-edittext linkify


【解决方案1】:

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

【讨论】:

  • 这对我不起作用。我没有运气使用 XML 版本。文本看起来像一个链接,但不可点击。
  • 你用textView.setText(Html.fromHtml(html));吗?
  • 你不需要使用Linkify.addLinks(textView, Linkify.ALL);
  • 这确实有效!我错过了setMovementMethod() 电话。
  • 这适用于 TextView 但问题是适用于 EditText
【解决方案2】:

对于编辑文本,我设法通过以下方式获得可点击的链接。 首先,我实现了一个自定义运动方法,描述为here

Java

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

        }
    });

【讨论】:

  • 这是完美的。有没有办法实现这一点,能够检测电话号码并突出显示它们?
  • 是的@Collinux 类Linkify 支持4 种类型:Web 链接、电话号码、电子邮件和地图地址
  • 请注意,如果我们打算拥有自己的自定义CustomMovementMethod,我们应该使用setLinksClickable(false);
【解决方案3】:

XML:-- 写在你的编辑文本中

android:autoLink="web" android:inputType="textWebEditText"

【讨论】:

  • 您可以通过 (1) 将代码格式化为 code,即用反引号括起来,(2) 详细说明您的 XML 和 Java/Kotlin 代码之间的连接以及步骤实际完成这项工作,并且 (3) 解释您的方法如何从 2013 年起改进 Kamil's answer
【解决方案4】:

希望这会对某人有所帮助

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)

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 2017-06-03
    • 2011-02-13
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多