1. ホーム
  2. android

[解決済み] Android Spanned, SpannedString, Spannable, SpannableString と CharSequence

2022-11-11 07:08:30

質問

Androidには、テキストや文字列に関連する様々なインタフェースがあります。 Spanned , SpannedString , Spannable , SpannableStringCharSequence .

私は上記のすべてを様々な場面で使用してきました。 通常 を使用した後 Html.fromHtml() の中にリンク可能なテキストを表示するために TextView の中にリンク可能なテキストを表示し、それに何らかのスタイルを適用する。

Androidの公式ドキュメントからこれらのインターフェースの目的や使い方を理解しようとしましたが、非常にわかりにくいので失敗しました。 これらのインターフェイスの目的は何ですか? どのような場合に使用を避けた方がよいのでしょうか?これらのいずれかを使用するときに考慮すべき明らかなパフォーマンスの影響はありますか?

もし誰かが適切な説明を提供してくれるなら、それはとてもありがたいことです。

どのように解決するのですか?

これらのインターフェースは何のためにあるのでしょうか?

CharSequence は、文字の並びを表現する標準的なJavaのインタフェースです。 String の具体的な実装として最もよく使われるのが CharSequence であり、次いで StringBuilder .

SpannedCharSequence で、quot;span" はテキストの一部に適用する書式を示し、それらのspanは変更することができません。

SpannableSpanned で、スパンを変更する機能(フォーマットの追加や削除)を追加していますが ではなく を追加し、テキスト自体を変更できるようにしました。

SpannedString の具体的な実装です。 Spanned インタフェースの具体的な実装です。

SpannableString の具体的な実装です。 Spannable インタフェースの具体的な実装です。

どのような場面で使用されることが多いですか?

1を返すメソッドがある場合(例. getText() の上に EditText をパラメータとするメソッドがある場合(例. setText() の上に TextView ).

あなたの引用した Html.fromHtml() は、おそらく従来の Android 開発で最も一般的なものであり、このように TextViewSpanned よりもはるかに軽い重量です。 WebView . しかし、他にも以下のような使用例があります。

どのような場合に使用を避けた方が良いのでしょうか?

ハゲ対策、除雪、ヒートポンプの修理、スフレの作り方など、どれもこれも最悪です。

:-)

これらのいずれかを使用する際に考慮すべき、パフォーマンスへの明らかな影響はありますか?

インターフェースは、定義上、パフォーマンスに影響を与えるものではありません。

私は SpannableString よりも大幅に遅いということは知りません。 SpannedString よりもかなり遅いです。しかし SpannableStringBuilder (これはテキストをフォーマットするスパンに加えてテキストを操作することができます) は SpannableString または SpannedString を使うことができます。パフォーマンスの違いが問題になるほどかどうかは、使い方次第でしょうけど。