31

リンクする必要があるテキストビューがあります。これが私がやっていることです..

TextView text = (TextView) view.findViewById(R.id.name);
text.setText("Android...Update from Android");
Pattern pattern = Pattern.compile("Android");
String scheme = "www.android.com";
Linkify.addLinks(text, pattern, scheme);

テキストビューは「Android...Update from Android」というテキストで正しく表示されますが、2 つの問題に直面しています。

1) 私のテキスト文字列には、文字列 "Android" の 2 つのインスタンスがあります。したがって、両方のテキストがリンクされています。最初に出現したものだけをリンクしたい。どうすればいいですか?

2) linkfy テキストをクリックするとブラウザが開きますが、URL が変です。開こうとしている URL は「www.comandroid」です。ここで何がうまくいかないのかわかりません。URL のテキスト「android」は置き換えられています。テキストをリンク化するときに何か間違ったことをしていますか?

どんな助けでも大歓迎です。

4

9 に答える 9

25

簡単な方法は、autoLink を XML レイアウトに配置することです。

  android:autoLink="web" 
于 2012-11-19T16:09:55.413 に答える
24

これを簡単に行う静的メソッドを作成しました。

/**
 * Add a link to the TextView which is given.
 * 
 * @param textView the field containing the text
 * @param patternToMatch a regex pattern to put a link around
 * @param link the link to add
 */
public static void addLink(TextView textView, String patternToMatch,
        final String link) {
    Linkify.TransformFilter filter = new Linkify.TransformFilter() {
        @Override public String transformUrl(Matcher match, String url) {
            return link;
        }
    };
    Linkify.addLinks(textView, Pattern.compile(patternToMatch), null, null,
            filter);
}

そして、OPはそれを簡単に使用できます:

addLink(text, "^Android", "http://www.android.com");
于 2011-04-26T18:09:43.077 に答える
9

私は Linkify の経験があまりありません。これまでのところ、テキスト内の URL を別のバージョンのaddLinks.

ただし、「Android」で一致するために使用している正規表現は、正規表現を微調整することで、文字列を開始するものにのみ一致するように変更できます。

Pattern pattern = Pattern.compile("^Android");

「^」が追加されていることに注意してください。これにより、文字列の開始時にパターン 'Android' のみに一致するように正規表現マッチャーに指示します。それがあなたの弦でうまくいくなら、それは素晴らしいことです。リンクしたい単語が行の先頭にない場合は、正規表現をもう少し調べる必要があります。より多くのregular-expressions.infoを学ぶために、このサイトをお勧めします

于 2011-01-20T11:24:44.413 に答える
9

テキストに含まれるすべてのURLを開きたい場合は、これを行うことができます..

            TextView textview=(TextView)findViewById(R.id.text);

    textview.setText("Android....Update from android...www.android.com");
    Linkify.addLinks(textview, Linkify.WEB_URLS);
    textview.setMovementMethod(LinkMovementMethod.getInstance());

すべての URL で機能する可能性があります。

于 2011-01-20T11:24:52.170 に答える
5

ここで、Shawns の回答と SpunkerBaba のコメントから、このヘルパー クラスを作成しました。これにより、変更内容の二重追加が URL に追加されるという問題が発生しなくなります。

package com.your.package;

public class Linkify {

    /**
     * @param textView
     *            textView who's text you want to change
     * @param linkThis
     *            a regex of what text to turn into a link
     * @param toThis
     *            the url you want to send them to
     */
    public static void addLinks(TextView textView, String linkThis, String toThis) {
        Pattern pattern = Pattern.compile(linkThis);
        String scheme = toThis;
        android.text.util.Linkify.addLinks(textView, pattern, scheme, new MatchFilter() {
            @Override
            public boolean acceptMatch(CharSequence s, int start, int end) {
                return true;
            }
        }, new TransformFilter() {

            @Override
            public String transformUrl(Matcher match, String url) {
                return "";
            }
        });
    }

}

用途:

 Linkify.addLinks(profileTextView, "BlundellApps.com", "http://www.BlundellApps.com");
于 2012-11-03T18:25:36.100 に答える
3

本当に必要なのは、次のような単純なものだと思います。

final TextView textView = ((BodyViewHolder) holder).textView;
textView.setText(text);
Linkify.addLinks(textView, Linkify.WEB_URLS); // I would do this only during view creation, btw.

具体的に URL を追跡しています。Linkigy.ALL の使用を提案する人もいますが、これは望ましくありません。

public static final int ALL = WEB_URLS | EMAIL_ADDRESSES | PHONE_NUMBERS | MAP_ADDRESSES;

また、他の人は以下を追加することを提案しています:

textview.setMovementMethod(LinkMovementMethod.getInstance());

リンクルールを追加した後ですが、addLinksすでに内部でそれを行っています;-)

乾杯!

于 2016-06-01T15:45:39.493 に答える
2

問題が解決しました。最初の問題の解決策は、Ian Leslie によって提供された回答です。2つ目の問題の解決策は次のとおりです。API「Linkify.addLinks」の動作は、URLの末尾にリンクしたい文字列を追加するというものです。たとえば、テキスト「Android」を「www.android.com」にリンクしたい場合。最終的な URL は「www.android.comAndroid」ですが、これは私が必要としていたものではありません。

public static final void addLinks (TextView text, Pattern p, String scheme, Linkify.MatchFilter matchFilter, Linkify.TransformFilter transformFilter)
TransformFilter transformFilter = new TransformFilter() {
public final String transformUrl(final Matcher match, String url) { 
return ""; 
} }; 

API transformFilter は null 文字列を返します。したがって、私の最終的な URL は「www.android.com」です。

于 2012-11-20T05:48:53.223 に答える