これをTextView
呼び出してデータセットを取得するがあります:
tv.setText(Html.fromHtml(myText));
文字列myText
には、部分的にフォーマットされた html データが含まれています。たとえば、フォント タグはあるが、タグを使用してフォーマットされた URL リンクがない場合があり<a href=...>
ます。Linkify.addLinks(...)
私のテキストには、Linkify が適切に変換する他の種類のリンクが含まれている可能性があるため、を使用してそれを行うことを望んでいました。だから私はこのように見えるように私のコードを書きました:
String myText = "<font color=\"red\">Red text</font> and Url: www.google.com";
tv.setText(Html.fromHtml(myText));
Linkify.addLinks(tv, Linkify.ALL);
tv.setMovementMethod(LinkMovementMethod.getInstance());
これは正しく動作しません。つまり、フォントタグは処理しますが、Linkify は URL をUrlSpan
適切に変換しません。
あるいは、Html.fromHtml(..) なしで setText() を呼び出すと、Linkify は機能しますが、html フォント タグから書式設定されたすべてのテキストが失われます。どういうわけか、それらは両方とも矛盾しているように見え、私はどちらか一方しか持つことができません.
ここに私が理解していない興味深い部分があります。Java から Linkify コードを削除し、私のレイアウト xml に移動して、そこに次の行を追加すると、すべてが機能しているように見えます (Linkify と fromHtml の両方が一緒にうまく動作することになります...どういうわけか)
<TextView
...
android:autoLink="all"
android:linksClickable="true"
...
/>
なぜそれがすべてを機能させるのか、誰かが私に説明できますか??
TextView のソースコードを調べたsetMovementMethod()
ところ、最終的に次のように呼び出されました。
setFocusable(true);
setClickable(true);
setLongClickable(true);
これにより、理論的にはすべてが機能し、xml レイアウト コードと同じように動作するはずです。Linkify.addLinks(..)
以前Javaコードで呼び出す順番を入れ替えてみsetText(Html.fromHtml(..))
ましたが、変わりませんでした。
java で Linkify.addLinks() と Html.fromHtml() を組み合わせるとこの動作が発生する理由についてのアイデアはありますが、xml レイアウトでは発生しませんか?