自动链接在TextView中链接URL的方括号

时间:2014-03-20 06:47:51

标签: android android-layout textview android-textattributes

我有一个网址: https://<site name>/pallavi/[Songs.PK]%2002%20.mp3

我有一个文字视图,其属性为:android:autoLink="all"

如果我只是将文本设置为文本视图,我的文本视图只会突出显示[。它看起来像这样:

https://< site name >/pallavi/ [Songs.PK]%2002%20.mp3

我想要的是,整个链接应该突出显示如下:

https://< site name >/pallavi/[Songs.PK]%2002%20.mp3

到目前为止我一直在尝试:

  1. 使用&lt;前&gt; tag和Html.fromHtml,但它似乎不起作用! (我甚至不知道android中是否支持&lt; pre&gt ;.)

  2. 使用过Jsoup.parser。但这对我来说似乎也不起作用。

  3. 更新 我也试过这个答案:https://stackoverflow.com/a/12376115/1320263


    请问我是否知道android的问题是文本视图的linkAll属性本身不将括号视为有效字符?如果它受支持,我如何超链接呢?

    同时注意 : 我在问题中写的文字(或链接)只是一个示例文本。实际上,我正在获取一个文本块,从那里很难确定超链接的确切位置和结束位置。此外,块中存在的链接数量是未知的。因此我不能使用< a href = "" >的东西......

2 个答案:

答案 0 :(得分:3)

如果其他人碰巧遇到同样的问题,以下是对我有用的解决方案:

    Pattern pattern = Pattern.compile("(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))");


    SpannableString spannable = new SpannableString(html);
    Matcher matcher = pattern.matcher(spannable);

    // Create ActivitySpans for each match
    while (matcher.find())
        spannable.setSpan(new ActivitySpan(matcher.group()), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    // Create a new TextView with these spans and enable the clickable links
    mTxtEventDescription.setText(spannable);

答案 1 :(得分:0)

你可以试试这个:

((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));`