如何使深度 link 字符串在 android TextView 中可点击

How to make deep link string clickable in android TextView

如何在 android TextView 中制作一个深 link 字符串,例如 "myapp://product/123" 可点击。我知道有自动链接选项,例如电子邮件、网络和 phone,但没有任何深度 link 选项。如何使其可点击并在点击 link 时启动意图?

只需在 java file.That 中编写如下代码即可,您可以从文本视图中单击任何 link。

TextView t2 = (TextView) findViewById(R.id.text2);
t2.setMovementMethod(LinkMovementMethod.getInstance());

您可以使用 ClickableSpan

例如

ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View textView) {
        startActivity(new Intent(MyActivity.this, NextActivity.class));
    }
    @Override
    public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            ds.setUnderlineText(false);
        }
};

看到这个linkHow to set the part of the text view is clickable

就用这个

YourTextView.setMovementMethod(LinkMovementMethod.getInstance());

看着,我写的类似:

val url = "myapp://example.com/some_string"
textView.text = url
textView.setOnClickListener {
    startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}

AndroidManifest 中甚至不需要 <uses-permission android:name="android.permission.INTERNET" />

如果您有一个应用程序,响应myapp方案和example.com主机,它将被打开。

要格式化 textView like a link 还写:

textView.hyperlinkStyle()


private fun TextView.hyperlinkStyle() {
    setText(
        SpannableString(text).apply {
            setSpan(
                URLSpan(""),
                0,
                length,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            )
        },
        TextView.BufferType.SPANNABLE
    )
}