[解決済み] SPAN_EXCLUSIVE_EXCLUSIVEなどのSpanフラグの意味を教えてください。
質問
どなたか、例題を挙げて明確に説明してください。
スパンフラグ
のように
SPAN_EXCLUSIVE_EXCLUSIVE
と
SPAN_MARK_MARK
の意味と、どのような場合にどのようなフラグを使用するのか?
公式ドキュメントに書いてあることがよくわかりません。
型のスパン
SPAN_EXCLUSIVE_EXCLUSIVE
というタイプのスパンは、始点または終点に挿入されたテキストを含むように拡張されません。 挿入されることはありません。
expand to include"は、スパンを挿入した後に行われた編集を指すのでしょうか?
これらのフラグは、不変テキストを持つSpannablesには影響しないということでしょうか?
どのように解決するのですか?
フラグが意味しないこと
私が最初に
INCLUSIVE
と
EXCLUSIVE
の部分は
Spannable
フラグは、スパンの開始と終了のインデックス位置を含むかどうかを示すだけだと思っていました。しかし、そうではありません。次の例でそれを説明しよう。
String myString = "01234";
int start = 1;
int end = 3;
int spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // this is what is changing
SpannableString spannableString = new SpannableString(myString);
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(foregroundSpan, start, end, spanFlag);
textView.setText(spannableString);
以下はその結果です。
SPAN_INCLUSIVE_INCLUSIVE
SPAN_INCLUSIVE_EXCLUSIVE
SPAN_EXCLUSIVE_INCLUSIVE
SPAN_EXCLUSIVE_EXCLUSIVE
これらはすべて同じです! フラグはスパンに影響を与えません。 スパン は常に はその開始インデックスにある文字を含み、終了インデックスにある文字を除外します。
フラグが意味するもの
この
INCLUSIVE
と
EXCLUSIVE
の部分は、実際にはスパナブル・フラッグの
であるテキストをスパンが含むべきかどうかを示します。
挿入される
であるテキストを含めるかどうか。
.
以下は、それを説明するための修正例です。
String myString = "01234";
int start = 1;
int end = 3;
int spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // this is what is changing
// set the span
SpannableStringBuilder spannableString = new SpannableStringBuilder(myString);
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(foregroundSpan, start, end, spanFlag);
// insert the text after the span has already been set
// (inserting at start index second so that end index doesn't get messed up)
spannableString.insert(end, "x");
spannableString.insert(start, "x");
textView.setText(spannableString);
を挿入した結果は以下の通りです。
x
を挿入した結果です。
SPAN_INCLUSIVE_INCLUSIVE
SPAN_INCLUSIVE_EXCLUSIVE
SPAN_EXCLUSIVE_INCLUSIVE
SPAN_EXCLUSIVE_EXCLUSIVE
注意事項
-
2つ目の例では
SpannableStringBuilder
の中のテキストはSpannableString
のテキストは不変なので、そこにテキストを挿入することはできません。したがって、フラグは一般にSpannableString
. しかし、例えばSpannableString
にコピーされSpannableStringBuilder
またはEditable
であり、そこからフラグが意味を持つことになります。 -
この回答を見る
との違いについては
SpannableString
,SpannableStringBuilder
,Editable
などがあります。
関連
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] FloatingActionButtonのサンプルとサポートライブラリ
-
[解決済み] Android Studioの「未実装メソッドの追加」機能
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] edittextのテキストがメールアドレスかどうかを確認するには?
-
[解決済み] アダプタからActivityメソッドを呼び出す
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] Android UiThread(UIスレッド)とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TextViewの中に複数のスタイルを持たせることは可能ですか?
-
[解決済み】AndroidでTextViewのspanの色を設定する。
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] バイト配列の画像ファイルをビットマップに変換するには?
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
-
[解決済み] アンドロイドボタンセレクター
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理
-
[解決済み] Android Spanned, SpannedString, Spannable, SpannableString と CharSequence