3

私はURLを持っています: https://<site name>/pallavi/[Songs.PK]%2002%20.mp3

私はプロパティを持つテキストビューを持っています:android:autoLink="all"

単純にテキストをテキスト ビューに設定すると、テキスト ビューは [. 次のようになります。

https://<サイト名>/pallavi/【Songs.PK】%2002%20.mp3

私が欲しいのは、リンク全体を次のように強調表示する必要があることです:

https://<サイト名>/pallavi/[Songs.PK]%2002%20.mp3

私が今まで試したこと:

  1. < pre > タグと Html.fromHtml を使用しましたが、機能しないようです。(ただし、 < pre > が android でサポートされているかどうかもわかりません。)

  2. Jsoup.parser を使用しました。しかし、それも私にはうまくいかないようです。

更新 私もこの答えを試しました: https://stackoverflow.com/a/12376115/1320263


テキストビューのlinkAllプロパティ自体が括弧を有効な文字と見なさないという問題がAndroidにあるかどうかを教えてください。サポートされている場合、それもハイパーリンクするにはどうすればよいですか?

また、注:質問に書いたテキスト(またはリンク)は単なるサンプルテキストです。実際には、ハイパー リンクの開始位置と終了位置を正確に特定するのが非常に難しいテキスト ブロックを取得しています。また、ブロック内に存在するリンクの数は不明です。したがって、私はそのことを使用することはできません< a href = "" >...

4

2 に答える 2

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);
于 2014-03-21T11:35:35.457 に答える
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)));`
于 2014-03-20T07:03:29.593 に答える