Android TextView SpannableStringを使って複合テキストを設定する方法の詳細


この例は、Android TextViewがSpannableStringを用いて複合テキストを設定する方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
TextViewは通常普通のテキストを表示するために使用されますが、いくつかのテキストをスタイル、イベントの設定する必要があります。AndroidシステムはSpannableStringクラスで指定されたテキストに関連した処理を行います。具体的には以下の機能があります。
1、Background ColorSpan背景色
2、ClicableSpanテキストはクリックできます。クリックイベントがあります。
3、Foreground ColorSpanテキスト色(前景色)
4、MaskFilterSpan修飾効果、例えばぼかし、レリーフ(EmbosMasfilter)
5、MetricAffectingSpan父類は、一般的に使われません。
6、ラスターイゼルスの効果
7、StrikethroughSpan取り消し線(中線)
8、SugustionSpanはプレースホルダに相当します。
9、アンダーラインSpanアンダーライン
10、Absolute SizeSpan絶対サイズ(テキストフォント)
11、DynamicDrawableaSpan設定画像は、テキストベースまたはベースラインに基づいて配置されます。
12、ImageSpan画像
13、RelativeSizeSpan相対サイズ(テキストフォント)
14、ReplaccementoSpanの父親類は、一般的に使われません。
15、ScaleXSpanはx軸に基づいてスケーリングします。
16、スタイル:太字、斜体など
17、SubscriptSpanのログアウト(数学公式が使用されます)
18、SuperscriptSpan上付き(数学式は使う)
19、TextApplearanceSpanテキストの外観(フォント、サイズ、スタイルと色を含む)
20、Type faceSpanテキストフォント
21、URLSパンテキストハイパーリンク
詳細は以下の通りです。
1、Background ColorSpan背景色

SpannableString spanText = new SpannableString("   -- https://www.jb51.net");
spanText.setSpan(new BackgroundColorSpan(Color.GREEN), 0, spanText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
2、ClicableSpanテキストはクリックできます。クリックイベントがあります。
AndroidはTextViewを使って、下線なしのハイパーリンクを実現する方法です。
3、Foreground ColorSpanテキスト色(前景色)

spanText = new SpannableString("   -- https://www.jb51.net");
spanText.setSpan(new ForegroundColorSpan(Color.BLUE), 6, spanText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
4、MaskFilterSpan修飾効果、例えばぼかし、レリーフ(EmbosMasfilter)

spanText = new SpannableString("MaskFilterSpan -- https://www.jb51.net");
int length = spanText.length();
//  (BlurMaskFilter)
MaskFilterSpan maskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(3, Blur.OUTER));
spanText.setSpan(maskFilterSpan, 0, length - 10, Spannable.
SPAN_INCLUSIVE_EXCLUSIVE);
//  (EmbossMaskFilter)
maskFilterSpan = new MaskFilterSpan(new EmbossMaskFilter(new float[]{1,1,3}, 1.5f, 8, 3));
spanText.setSpan(maskFilterSpan, length - 10, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
PS:効果図から見ると、レリーフの効果はあまりよくないです。フォントを大きく設定すると、よく見えるようになります。他の効果が必要です。MaskyFilterは定義から継承できます。
6、ラスターイゼルスの効果

spanText = new SpannableString("StrikethroughSpan");
spanText.setSpan(new StrikethroughSpan(), 0, 7, Spannable.
SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
PS:まだ分かりませんが、効果がはっきりしません。
7、StrikethroughSpan取り消し線(中線)

spanText = new SpannableString("StrikethroughSpan");
spanText.setSpan(new StrikethroughSpan(), 0, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
8、SugustionSpan
プレースホルダに相当します。通常はEditText入力ボックスに使用されます。このテキストをダブルクリックすると、ヒントボックスが表示され、いくつかの提案(推奨)テキストを選択します。選択したテキストはこのプレースホルダに置き換えられます。インプットメソッドで多く使われています。
PS:API 14が追加され、例がない。
9、アンダーラインSpanアンダーライン

spanText = new SpannableString("UnderlineSpan");
spanText.setSpan(new UnderlineSpan(), 0, spanText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
10、Absolute SizeSpan絶対サイズ(テキストフォント)

spanText = new SpannableString("AbsoluteSizeSpan");
spanText.setSpan(new AbsoluteSizeSpan(20, true), 0, spanText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
PS:フォントサイズを大きく設定して、効果があります。
11、DynamicDrawableaSpan設定画像は、テキストベースまたはベースラインに基づいて配置されます。

DynamicDrawableSpan drawableSpan =
 new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) {
 @Override
 public Drawable getDrawable() {
  Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
  d.setBounds(0, 0, 50, 50);
  return d;
 }
};
DynamicDrawableSpan drawableSpan2 = new DynamicDrawableSpan(
DynamicDrawableSpan.ALIGN_BOTTOM) {
 @Override
 public Drawable getDrawable() {
   Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
   d.setBounds(0, 0, 50, 50);
    return d;
   }
  };
spanText.setSpan(drawableSpan, 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
spanText.setSpan(drawableSpan2, 7, 8, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
PS:左の画像はベースラインに基づいて配置され、右の画像はベースラインに基づいて配置されます。
12、ImageSpan画像

spanText = new SpannableString("ImageSpan");
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, 50, 50);
spanText.setSpan(new ImageSpan(d), 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
PS:DynamicDrawable Spanとは違いますか?
13、RelativeSizeSpan相対サイズ(テキストフォント)

spanText = new SpannableString("RelativeSizeSpan");
//  proportion:    
spanText.setSpan(new RelativeSizeSpan(2.5f), 3, 4,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
PS:相対サイズの比率は現在のテキストフォントサイズに基づいています。
15、ScaleXSpanはx軸に基づいてスケーリングします。

spanText = new SpannableString("ScaleXSpan --   ");
//  proportion:    
spanText.setSpan(new ScaleXSpan(3.8f), 3, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
16、スタイル:太字、斜体など

spanText = new SpannableString("StyleSpan --   ");
//Typeface.BOLD_ITALIC:  +  
spanText.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 3, 7,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
17、SubscriptSpanのログアウト(数学公式が使用されます)

spanText = new SpannableString("SubscriptSpan --   ");
spanText.setSpan(new SubscriptSpan(), 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
18、SuperscriptSpan上付き(数学式は使う)

spanText = new SpannableString("SuperscriptSpan --   ");
spanText.setSpan(new SuperscriptSpan(), 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
19、TextApplearanceSpanテキストの外観(フォント、サイズ、スタイルと色を含む)

spanText = new SpannableString("TextAppearanceSpan --   ");
//     TextAppearance,            
spanText.setSpan(new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium),
 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
PS:システムは関連値TextApppearance_を提供しています。Small、TextApppearance_Largeなど。必要があれば上記のスタイルを基に修正します。
20、Type faceSpanテキストフォント

spanText = new SpannableString("TypefaceSpan --   ");
//         ,      TypefaceSpan
spanText.setSpan(new TypefaceSpan("monospace"), 3, 10,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);
PS:カスタムフォントの設定については、後にどのように使うかを紹介します。
21、URLSパンテキストハイパーリンク

spanText = new SpannableString("URLSpan --   ");
spanText.setSpan(new URLSpan("https://www.jb51.net"), 10, spanText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText); // URLSpan mTVText.setMovementMethod(new LinkMovementMethod());
Android関連の内容についてもっと興味がある読者は、当駅のテーマを調べてもいいです。「Android開発入門と上級教程」、「Androidマルチメディア操作技術まとめ(オーディオ、ビデオ、録音など)」、「Android基本コンポーネントの使い方のまとめ」、「AndroidビューViewテクニックのまとめ」、「Androidレイアウトlayout技巧まとめ」および「Androidコントロールの使い方のまとめ
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。