問題タブ [spannablestringbuilder]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - この効果を得るために、カスタマイズされたスパン可能な文字列を画像とともに追加する方法
私はこの効果を得ようとしています。
テキストビューがあり、必要な場所に画像と境界線を含むスパンを追加する必要があります。
これで TextView の部分的なテキストの周りに四角形の破線/点線のアウトラインを設定する方法は? 、破線の境界線を描画できましたが、境界線のテキストが次の行に移動したときに失敗しました(1行で機能しました)。
写真のとおりの効果を得ようとしています。https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/text/style/からデフォルトでサポートされているスパンを調べました
しかし、どのようにカスタマイズできるかを取得できません。
これに関する提案。
android - Spans を EditText に設定することにより、オンザフライでテキスト書式設定を効率的に適用する
テキストの書式設定 (太字、斜体など) を許可する EditText コントロールを使用しています。
書式設定を適用するには、TextWatcher の AfterTextChanged イベント ハンドラー内で、UI を介して太字などの書式設定スタイルがオンになっているかどうかを検出します。もしそうなら、私は2つの異なるアプローチを試しましたが、どちらも異なる理由で満足のいくものではありません:
アプローチ1
開始値については、_textView.SelectionStart - 1または StyleSpan が最初に適用されたときの開始位置を使用してみました。そして、終了値_textView.SelectionStart について。
このメソッドを使用すると、テキストは適切にフォーマットされているように見えますが、単一のスタイルスパンだけで十分な場合に、不要な StyleSpans が作成されます。これは、Html 変換によってテキストをローカル データベースに保存しようとすると明らかです。
たとえば、 の代わりに を<b>this is bold text</b>
取得して<b><b><b><b><b><b><b><b><b><b><b><b><b><b><b><b><b>this is bold text</b></b></b></b></b></b></b></b></b></b></b></b></b></b></b></b></b>
います。したがって、明らかに、私はこのアプローチで何か間違ったことをしている/非効率的です。これが明らかにもたらすのは、テキストの入力と起動時の取得の両方で、最終的に速度が低下することです。
私が検討したことは、前の文字にスパンがあるかどうかを確認することです(_textView.SelectionStart - 1
)、そうであればスパンを削除し、その時点から始まるスパンを追加します。_textView.SelectionStart
つまり、常に単一のスパンしかないことを保証します必要なスパンをチェック/削除/追加します。しかし、これはこれを処理する別の非効率的な方法のようです。
アプローチ 2
したがって、これは上記と同じ非効率にはつながりませんが、SpanTypes.ExclusiveInclusive
フラグが原因で、UI を介してオフに切り替えたときに、スタイルの書式設定を停止して終了することができません。つまり、Bold スタイルをオンにすると、トグルをオフにした場合でも、それに続くすべてのテキストが太字スタイルで書式設定されます。
2つのうち、これは正しい一般的なアプローチであると思われるので、トグルをオフにするとすぐにスタイルの適用を停止するために何かできるかどうか疑問に思っています. または、この種の要件を処理するためのベスト プラクティスとして完全に見逃した別の方法があります。