1

两个输入字符串,例如:

1.超链接输入:

"<a href=\"https://blog.twitter.com/official/en_us/topics/company/2018/keeping-your-account-secure.html\">Что случилось с паролями в логах Twitter</a>"

2. 简单网址:

https://www.youtube.com/watch?v=2Cj6CbC-DkU

TextView 类有两种方法可以突出显示链接并使它们可点击:

1.通过代码:

TextView.setMovementMethod(LinkMovementMethod.getInstance());

2.通过XML:

android:autoLink="web"

处理超链接的已知问题我们应该使用 LinkMovementMethod 的第一种方法,并删除 xml 属性“autoLink”。

关键是当我使用这个解决方案时,我的 textView 会忽略简单的链接(示例中的第二个输入字符串)。反之亦然 - 如果我使用 XML 解决方案,textView 将忽略超链接。

问题是我应该使用什么来支持这两者:超链接和简单的 url?

4

1 回答 1

0

假设您想要超链接单词Twitter,您可以使用SpannableStringBuilder例如:

 SpannableStringBuilder spanTxt = new SpannableStringBuilder(
            "Что случилось с паролями в логах ");
    spanTxt.append("Twitter");
    spanTxt.setSpan(new ClickableSpan() {
        @Override
        public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            ds.setColor(ContextCompat.getColor(context, R.color.pick_button_color)); //Your color for hyperlinked word
            ds.setUnderlineText(false);
        }

        @Override
        public void onClick(View widget) {
           // Handle click on Twitter
        }
    }, spanTxt.length() - "Twitter".length(), spanTxt.length(), 0);
    spanTxt.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.pick_button_color)), 33, spanTxt.length(), 0);  // I put 33 check did I count correctly

    textView.setMovementMethod(LinkMovementMethod.getInstance());
    textView.setText(spanTxt, TextView.BufferType.SPANNABLE);
于 2018-05-20T22:20:10.490 回答