【问题标题】:Hyperlink in AndroidAndroid中的超链接
【发布时间】:2011-03-13 08:29:51
【问题描述】:

我有一个问题:如何在普通文本的文本块中放置超链接?我有一些文字,在文字中我提到了一个 URL,我希望这个 URL 使用不同的颜色、下划线和可点击。

我知道 android 中的超链接可以用“Linkify”放置.. 我已经推荐了 android docs 页面

考虑与我想在 android 中显示的“android docs”相同的上述段落.....

【问题讨论】:

标签: android hyperlink anchor


【解决方案1】:

看看那个TextView underline phone number and hyperlink

但我可以看到 Linkify 没有为您提供所需的功能。没问题,您可以手动实现它。只需添加 ClickableSpans 并处理点击。代码示例在这里http://www.orangeapple.org/?p=354

【讨论】:

【解决方案2】:

@Fedor.... 我发现可以提供来自 API Demos 的链接。

这种方法最终被用于在段落文本之间提供链接。

     SpannableString ss = new SpannableString("text4: Click here 
                                                  to dial the phone.");

    ss.setSpan(new StyleSpan(Typeface.ITALIC), 0, 6,
           Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    ss.setSpan(new URLSpan("tel:4155551212"), 13, 17,
           Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    TextView t4 = (TextView) findViewById(R.id.TextView01);
    t4.setText(ss);
    t4.setMovementMethod(LinkMovementMethod.getInstance());

【讨论】:

  • 我们可以设置一个本地化的spannablestring吗?
【解决方案3】:

我知道这是一个老问题,但这是我最近遇到的一个问题,我没有找到对我有帮助的 StackOverflow 答案。所以经过广泛的实验,我找到了一个解决方案,并认为我会分享给后代。

在您的 strings.xml 中,使用 HTML 标记和标记:

<string name="example"><![CDATA[I know hyperlinks in android can be placed with "Linkify".. and i have referred <a href="http://developer.android.com/reference/android/text/util/Linkify.html">android docs</a> page]]></string>

在您的 XML 中,确保不要添加任何特殊属性。不要使用 android:autolink

在您的 Java 代码中,您必须使用 fromHtml、Linkify 和 LinkMovementMethod。确保在 LinkMovementMethod 之前调用 Linkify

exampleTextView.setText(Html.fromHtml(getString(R.string.example)));
Linkify.addLinks(exampleTextView, Linkify.WEB_URLS);
exampleTextView.setMovementMethod(LinkMovementMethod.getInstance());

另一个警告:如果您使用这些 HTML 链接,其中链接的显示文本与 URL(Google 和 www.google.com)不匹配,请勿将原始 URL 放入字符串中。所以:

<string name="example"><![CDATA[www.google.com I know hyperlinks in android can be placed with "Linkify".. and i have referred <a href="http://developer.android.com/reference/android/text/util/Linkify.html">android docs</a> page]]></string>

会将“www.google.com”转为链接,但不会将“android docs”转为链接。

这让我非常沮丧,因为我尝试了许多不同的组合并遵循了许多在线示例,但在我找到上述正确的魔法组合之前,这些都没有奏效。希望它可以帮助别人!

【讨论】:

    【解决方案4】:

    Use Spannable String

     private void setTermsAndTextToClickable(TextView tandcTextView, String termsAndCon, String wordTohyperLink, String termsAndConUrl){
        if (TextUtils.isEmpty(termsAndCon)){
            tandcTextView.setVisibility(View.GONE);
            return;
        }
    
        if (!TextUtils.isEmpty(termsAndCon) && !TextUtils.isEmpty(wordTohyperLink) && !TextUtils.isEmpty(termsAndConUrl)){
            SpannableString ssString = new SpannableString(termsAndCon);
            int startLoc = termsAndCon.indexOf(wordTohyperLink);
            int endLoc = termsAndCon.indexOf(wordTohyperLink) + wordTohyperLink.length();
            ssString.setSpan(new URLSpan(termsAndConUrl),startLoc,endLoc, 0);
            tandcTextView.setText(ssString);
            tandcTextView.setMovementMethod(LinkMovementMethod.getInstance());
    
            ClickableSpan clickableSpan = new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    // We display a Toast. You could do anything you want here.
                    Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
    
                }
            };
            ssString.setSpan(clickableSpan, startLoc, endLoc, 0);
        }else{
            tandcTextView.setText(termsAndCon);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2016-12-13
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 2012-07-20
      相关资源
      最近更新 更多