【问题标题】:TextView - how to display simple URLs and hyper linksTextView - 如何显示简单的 URL 和超链接
【发布时间】:2018-10-30 13:44:06
【问题描述】:

两个输入字符串,例如:

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 将忽略超链接。

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

【问题讨论】:

    标签: android hyperlink textview fromhtml


    【解决方案1】:

    假设您想超链接单词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);
    

    【讨论】:

    • 此任务的目的是显示未预定义的文本(例如:一些 API 响应)。考虑到 LinkMovementMethod 类已经完成了这项工作,我认为手动查找链接并手动构建跨度是一种复杂的解决方案。似乎我错过了一些东西,因为我没有看到一个通用的解决方案
    猜你喜欢
    • 2015-06-29
    • 2012-12-22
    • 2018-11-17
    • 2018-04-04
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 2017-02-14
    • 2011-05-14
    相关资源
    最近更新 更多