1

たとえば、次の文字列があります

\n 3 Doors Down は、米国ミシシッピ州エスカタウパの http://www.last.fm/tag/post-grunge\" class=\"bbcode_tag\" rel=\"tag\">ポスト グランジ バンドです。 1996年に結成され、ブラッド・アーノルド(ボーカル)、マット・ロバーツ(ギター)、トッド・ハレル(ベース)、クリス・ヘンダーソン(ギター)、グレッグ・アップチャーチ(ドラム)で構成され、2000年にファースト・アルバムのためにユニバーサル・レコードと契約した。 、 http://www.last.fm/music/3+Doors+Down/The+Better+Life\" class=\"bbcode_album\">The Better Life. 彼らはシングル「http://www.last.fm/music/3+Doors+Down/_/Kryptonite\" class=\"bbcode_track\">Kryptonite」のリリースで国際的な注目を集めました。 \n\n http://www.last.fm/music/3+Doors+Down\">

ハイパーリンクをクリック可能なテキストビューに文字列全体を表示したい。また、実際の URL は表示したくありません。URL の代わりに表示されるテキストだけです。この件に関する他の投稿を読んで、彼らはすべて、これに似たテキストビューを定義することを提案しています

<TextView
            android:id="@+id/tvArtistOverview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:autoLink="web"
            android:linksClickable="true" />

textview の SetMovementMethod を

myTextView.setMovementMethod(LinkMovementMethod.getInstance());

これらの手順に従うと、リンクはクリック可能になりますが、希望どおりに表示されません。私は何が欠けていますか?

以下は、現在の外観の例です。

もうすぐそこ

4

1 に答える 1

0

以下のコードを使用します。

TextView tv = ....
tv.setMovementMethod(LinkMovementMethod.getInstance());

    String content = tv.getText().toString();
    List<String> links = new ArrayList<String>();

    Pattern p = Patterns.WEB_URL;
    Matcher m = p.matcher(content);
    while (m.find()) {
        String urlStr = m.group();
        links.add(urlStr);
    }

    SpannableString f = new SpannableString(content);

    for (int i = 0; i < links.size(); i++) {
        final String url = links.get(i);

        f.setSpan(new InternalURLSpan(new OnClickListener() {
            public void onClick(View v) {
                Context ctx = v.getContext();
                String urlToOpen = url;
                if (!urlToOpen.startsWith("http://") || !urlToOpen.startsWith("https://"))
                    urlToOpen = "http://" + urlToOpen;
                openURLInBrowser(urlToOpen, ctx);
            }
        }), content.indexOf(url), content.indexOf(url) + url.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

    tv.setText(f);
于 2013-03-11T05:32:37.630 に答える