属性には厄介なバグがあります。autoLink
電話番号の例をクリックしてから、戻って 2 番目の URL リンクをクリックすると、電話番号が再び開きます。この属性は複数のリンクではうまく機能しないため、独自のクラスを実装しました。Github ClickableLinksTextView.javaのリンクを次に示します。
あなたの例では、あなたのクラスをxml-layoutのTextView
私のクラスに置き換えて、次のようにコードを変更することができます:ClickableLinksTextView
ClickableLinksTextView textView = (ClickableLinksTextView)view.findViewById(R.id.mytext);
textView.setText("My text: +4412345678 Go to website: www.google.com Blah blah");
Linkify.addLinks(textView, Linkify.ALL);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
textView.setMovementMethod(ArrowKeyMovementMethod.getInstance());
textView.setTextIsSelectable(true);
// the autoLink attribute must be removed, if you hasn't set it then ok, otherwise call textView.setAutoLink(0);
}
あなたの質問の問題の元の原因は、LinkMovementMethod
クラスとtextIsSelectable
属性にまったく互換性がないことです。Android OS 開発者でさえ、Android OS ソース コードでこれを認めています。
テキスト選択をサポートするテキストの移動方法を変更しないでください。任意のカーソル移動が妨げられます。
テキスト ビューが選択可能な場合、正しい移動方法の値はnull
との 2 つだけArrowKeyMovementMethod
です。これがArrowKeyMovementMethod
、私の例で明示的に設定した理由です。これLinkify.addLinks
は、間違った移動方法を設定し、元に戻す必要があるためです。
autoLink 属性のバグについては、Android 開発者がリンク検出を適切にコピーしていないことが原因です。@cheng yang の回答のコード例を見ることができます。コードは、いくつあっても最初のリンクを取得します。