我有一个网址:
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
到目前为止我一直在尝试:
使用&lt;前&gt; tag和Html.fromHtml,但它似乎不起作用! (我甚至不知道android中是否支持&lt; pre&gt ;.)
使用过Jsoup.parser。但这对我来说似乎也不起作用。
更新 我也试过这个答案:https://stackoverflow.com/a/12376115/1320263
请问我是否知道android的问题是文本视图的linkAll属性本身不将括号视为有效字符?如果它受支持,我如何超链接呢?
同时注意 :
我在问题中写的文字(或链接)只是一个示例文本。实际上,我正在获取一个文本块,从那里很难确定超链接的确切位置和结束位置。此外,块中存在的链接数量是未知的。因此我不能使用< a href = "" >
的东西......
答案 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)));`