2013-11-27 7 views
6

TextViewには、サーバーから取得したテキストが入っています。私はLinkifyを使用して、すべてのリンク検索を処理し、必要に応じてaddLinksメソッド全体でURLSpanを設定します。Linkifyを使用してTextViewのリンクをクリックして、テキスト内のリンクを検索して設定します。

問題は、リンクをクリックしたときのデフォルトの動作がブラウザで開き、クリックしたリンクを取得してそれを自分自身で処理することです。あなたの助けを

私は私が「クリック時」か何かを設定してみましょうLinkifyのいずれかの方法が表示されない

...

感謝:)

答えて

10

私は結局自分の "OnClickListener"をTextViewのリンクに設定することができました。

private static final void applyLink(String url, int start, int end, Spannable text) 
{ 
    URLSpan span = new URLSpan(url); 

    text.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 

へ:から

: 私のソリューションは、名前それCustomLinkifyとちょうどそのapplyLink方法を変更、私のプロジェクトにLinkifyをコピーした

_onLinkClickListenerは新しい分野である
private static final void applyLink(final String url, int start, int end, Spannable text) 
{ 
    URLSpan span = new URLSpan(url) 
    { 
     @Override 
     public void onClick(View widget) 
     { 
      _onLinkClickListener.onLinkClicked(url); 
     } 
    }; 

    text.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 

、新しいCustomLinkifyを使用する前に私が設定します。

私はそれほどエレガントなソリューションではなく、ネイティブのLinkifyを通してリスナーを設定することができるようにGoogleを選択しましたが、私にとっては、自分のSpannableロジック(他の関連する質問に示唆されている)を実装するよりも優れています。

私はLinkifyコードを信用しています。変更があった場合には、私は時々チェックして、変更する場合はCustomLinkifyを更新します。

これは誰かを助けることを願っています。

+0

こんにちは、ソリューションのおかげで私のプロジェクトにLinkify.javaを対処しようとしましたが、私のプロジェクトにインポートすることができないlibcore.util.EmptyArrayとcom.android.i18nのようないくつかの外部ライブラリを使用しているようです。これをどのようにして管理したかについての詳細な情報を投稿してください。ありがとう。 – user465125

-4

たぶん、あなたは、WebViewの代わりにのTextViewを使用する必要があります?

+0

私はリンクを使ってテキストを表示するだけのためにwebViewを使うのは解決策ではないと思います。とにかくありがとう。 – Shirane85

+1

WebViewを使用すると、自分でクリックを処理できます。ところで、回避策をdownvotingは微妙です。あなたが悪い答えではなく回避策をdownvoteすれば、あなたはSatckoverflowの誰かからさらなる答えを得ることはできません。たぶんあなたはもう一度downvotingの仕組みを読まなければならないかもしれません:http://stackoverflow.com/help/privileges/vote-down – kirsche40

+0

@ kirsche40 downvotingは、125の評判を過ぎて初めて利用可能です。彼らは51を持っています。 – hichris123

2

私はまた、カスタムSpannableロジックをアプリに実装するのが面倒で、このためのライブラリを作成することになります。 Textooを参照してください。 Textoo

、これは次のように達成することができます:ちょうど共有し、誰かがそれが役に立つことを願っていますし

TextView myTextView = Textoo 
    .config((TextView) findViewById(R.id.my_text_view)) 
    .linkifyEmailAddresses() 
    .linkifyMapAddresses() 
    .linkifyPhoneNumbers() 
    .linkifyWebUrls() // or just .linkifyAll() 
    .linkify(patternSettings, "internal://settings/") 
    .linkify(patternGoogle, "http://www.google.ie/search2?q=", null, transformFilter) 
    .linkify(patternGoogle, "http://www.google.ie/search3?q=", matchFilter, transformFilter) 
    .addLinksHandler(new LinksHandler() { 
     @Override 
     public boolean onClick(View view, String url) { 
      if ("internal://settings/location".equals(url)) { 
       Intent locSettings = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       startActivity(locSettings); 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }) 
    .apply(); 

関連する問題