我有一个网址:https://<site name>/pallavi/[Songs.PK]%2002%20.mp3
我有一个文本视图,属性:android:autoLink="all"
如果我只是将文本设置为文本视图,那么我的文本视图只会突出显示[。看起来像这样:
https://< site name >/pallavi/[歌曲.pk]%2002%20.mp3
我想要的是,整个链接应该突出显示如下:
https://< site name >/pallavi/[Songs.PK]%2002%20.mp3
我到目前为止所做的努力:
使用了
标记和html.fromhtml,但似乎不起作用!(我甚至不知道android是否支持。)
使用jsoup.parser。但这对我来说也不管用。
更新
我也试过这个答案:https://stackoverflow.com/a/12376115/1320263
如果android的问题是文本视图的linkall属性本身不认为括号是有效字符,请告诉我。如果它是支持的,我如何超链接也?
还要注意:
我在这个问题上写的文本(或链接)只是一个示例文本。实际上,我得到了一个文本块,从中很难确定超级链接的起始位置和结束位置。此外,块中存在的链接数将是未知的。因此我不能使用< a href = "" >
这个东西…最佳答案
如果其他人碰巧也有同样的问题,下面是对我有效的解决方案:
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);