記事のディレクトリ
-
- SpannableStringとは何ですか?
- さまざまなスパン
- ForegroundColorSpan 前景色
- BackgroudColorSpan背景色
- ClickableSpanクリックイベント
- URLSpanハイパーリンク
- MaskFilterSpanファジーレリーフ
- RelativeSizeSpanフォントの相対サイズ
- AbsoluteSizeSpan絶対フォントサイズ
- ScaleXSpanフォントのx軸スケーリング
- StyleSpanスタイル
- TypefaceSpanフォント
- TextAppearanceSpanテキストの外観
- UnderlineSpan下線
- 取り消し線スパン取り消し線
- SuperscriptSpan上付き文字
- SubscriptSpan添え字
- ImageSpanの写真
- 総括する
SpannableStringとは何ですか?
SpannableStringはCharSequenceの一種です。元のCharSequenceは、スタイルのないSpannableString
文字のシーケンスです。文字シーケンスに基づいて指定された文字をレタッチできます。開発中、TextViewをパラメータとしてsetText(CharSequence)
渡して、SpannableString
表示を実現できます。効果さまざまなスタイルのテキストの。
作成方法
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
SpannableString
レタッチする方法は?
一般的に次のように設定します
spannableString.setSpan(Object what, int start, int end, int flags);
ここでいくつかのパラメータの意味を説明します
- 何:あらゆる種類の研磨SpannableString
Span
; - int:洗練されるテキストフィールドの先頭にある添え字。
- end:洗練されるテキストフィールドの終わりにある添え字。
- flags:開始添え字と終了添え字を含めるかどうかを決定するフラグビット。4つのオプションのパラメーターがあります。
- SPAN_INCLUSIVE_EXCLUSIVE:開始添え字を含めますが、終了添え字は含めません
- SPAN_EXCLUSIVE_INCLUSIVE:開始添え字を含めず、終了添え字を含めます
- SPAN_INCLUSIVE_INCLUSIVE:開始添え字と終了添え字の両方を含める
- SPAN_EXCLUSIVE_EXCLUSIVE:開始添え字も終了添え字も含まれません
ここでは重要な役割が関係しています。これは、テキストのレタッチ方法を決定するさまざまなスパンであり、最後の3つのパラメーターは、レタッチするテキストを決定します。便宜上、次のフラグはデフォルトでSPAN_INCLUSIVE_EXCLUSIVEモードを使用します。
さまざまなスパン
まず、クラス構造図を見て、さまざまなスパン間の関係を理解します
すべてのスパンが抽象クラスCharacterStyleを継承していることがわかります。さらに、MetricAffectingSpan、ReplacementSpan、ClickableSpanはすべて抽象クラスです。以下に、一般的に使用されるいくつかのスパンを示します。
ForegroundColorSpan 前景色
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.GREEN);
spannableString.setSpan(foregroundColorSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
ForegroundColorSpan:ForegroundColorSpan:前景色、つまりテキストに色を付ける、色は緑に設定、開始は4、終了は7、「Eason Chan」で、3つの単語が緑色で表示され、実際の効果を確認します。
BackgroudColorSpan背景色
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.GREEN);
spannableString.setSpan(backgroundColorSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
BackgroudColorSpan:ForegroundColorSpanと同様に、テキストの背景に色を付けます
ClickableSpanクリックイベント
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this, "如果我是陈奕迅", Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(false);
}
};
spannableString.setSpan(clickableSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
mTextView.setText(spannableString);
ClickableSpan:クリック可能な効果を実現する抽象クラスです。onClickメソッドをオーバーライドしてクリックイベントを実現できます。ここでは、「Eason Chan」という3つの単語をクリックして、トーストを再生します。
URLSpanハイパーリンク
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
URLSpan urlSpan = new URLSpan("https://www.baidu.com/s?ie=UTF-8&wd=陈奕迅");
spannableString.setSpan(urlSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
mTextView.setText(spannableString);
URLSpan:ClickableSpanから継承されたハイパーリンクの効果を実現するには、クリックしてブラウザにジャンプします
MaskFilterSpanファジーレリーフ
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
MaskFilterSpan embossMaskFilterSpan =
new MaskFilterSpan(new EmbossMaskFilter(new float[]{
10, 10, 10}, 0.5f, 1, 1));
spannableString.setSpan(embossMaskFilterSpan, 0, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(1.5f);
spannableString.setSpan(relativeSizeSpan, 0, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
MaskFilterSpan blurMaskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(10, Blur.NORMAL));
spannableString.setSpan(blurMaskFilterSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
MaskFilterSpan:構築メソッドは、パラメーターとしてMaskFilterを受け入れます。これには、
エンボス効果を実現するために、EmbossMaskFilterとBlurMaskFilterEmbossMaskFilterの2つのサブクラスがあります。
EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius)
- 方向:float配列、長さ3の配列スカラー[x、y、z]を定義して、光源の方向を指定します
- アンビエント:アンビエントライトの明るさ、0〜1
- 鏡面反射:鏡面反射係数
- blurRadius:ぼかし半径、> 0である必要があります
BlurMaskFilterはぼかし効果を実現します
BlurMaskFilter(float radius, Blur style)
- 半径:ぼかし半径
- スタイル:4つのオプションパラメータがあります
- BlurMaskFilter.Blur.NORMAL:内側と外側をぼかします
- BlurMaskFilter.Blur.OUTER:外部ブラー
- BlurMaskFilter.Blur.INNER:内部ブラー
- BlurMaskFilter.Blur.SOLID:内側は太字、外側はぼやけています
RelativeSizeSpanフォントの相対サイズ
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(1.5f);
spannableString.setSpan(relativeSizeSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
RelativeSizeSpan:フォントの相対サイズを設定します。ここではTextViewのサイズの1.5倍に設定されています。画像を参照してください。
AbsoluteSizeSpan絶対フォントサイズ
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(40, true);
spannableString.setSpan(absoluteSizeSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
AbsoluteSizeSpan:フォントの相対絶対サイズを設定します。40はテキストサイズを意味し、trueは単位が伏角であることを意味し、falseはピクセルを意味します。
ScaleXSpanフォントのx軸スケーリング
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
ScaleXSpan scaleXSpan= new ScaleXSpan(1.5f);
spannableString.setSpan(scaleXSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
ScaleXSpan:フォントのx軸ズームを設定します。1.5はx軸ズームが1.5倍であることを意味し、効果は図に示されています。
StyleSpanスタイル
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
StyleSpan italicSpan = new StyleSpan(Typeface.ITALIC);
StyleSpan boldItalicSpan = new StyleSpan(Typeface.BOLD_ITALIC);
spannableString.setSpan(boldSpan, 0, 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(italicSpan, 2, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(boldItalicSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
StyleSpan:斜体、太字などのテキストスタイルを設定します
TypefaceSpanフォント
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
TypefaceSpan monospace = new TypefaceSpan("monospace");
TypefaceSpan serif = new TypefaceSpan("serif");
TypefaceSpan sans_serif = new TypefaceSpan("sans-serif");
spannableString.setSpan(monospace, 0, 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(serif, 2, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(sans_serif, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
TypefaceSpan:モノスペース、セリフ、サンセリフなどのテキストフォントタイプを設定します。
TextAppearanceSpanテキストの外観
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
TextAppearanceSpan textAppearanceSpan = new TextAppearanceSpan(this, android.R.style.TextAppearance_Material);
spannableString.setSpan(textAppearanceSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
TextAppearanceSpan:スタイルリソース設定を介してテキストの外観を設定します。ここではシステムスタイルリソースが使用されます
UnderlineSpan下線
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
UnderlineSpan underlineSpan = new UnderlineSpan();
spannableString.setSpan(underlineSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
UnderlineSpan:テキストの下線を設定します。テキストを強調表示するときにこのスパンを使用できます
取り消し線スパン取り消し線
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
StrikethroughSpan strikethroughSpan = new StrikethroughSpan();
spannableString.setSpan(strikethroughSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
StrikethroughSpan:テキストの取り消し線を設定します
SuperscriptSpan上付き文字
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
SuperscriptSpan superscriptSpan = new SuperscriptSpan();
RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(0.8f);
spannableString.setSpan(relativeSizeSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(superscriptSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
SuperscriptSpan:テキストを上付き文字として設定します
SubscriptSpan添え字
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
SubscriptSpan subscriptSpan = new SubscriptSpan();
RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(0.8f);
spannableString.setSpan(relativeSizeSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(subscriptSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
SubscriptSpan:テキストを下付き文字として設定します
ImageSpanの写真
SpannableString spannableString = new SpannableString("如果我是陈奕迅");
ImageSpan imageSpan = new ImageSpan(this, R.drawable.ic_eason);
spannableString.setSpan(imageSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);
ImageSpan:画像を設定します
総括する
上記のスパンを要約します
- ForegroundColorSpan:前景色
- BackgroundColorSpan:背景色
- ClickableSpan:抽象クラス、クリック可能な効果、クリックイベントに応答するためのonClickメソッドのオーバーライド
- URLSpan:ハイパーリンク
- MaskFilterSpan:EmbossMaskFilterエンボス効果、BlurMaskFilterブラー効果
- RelativeSpan:テキストの相対サイズ
- AbsoluteSpan:絶対テキストサイズ
- ScaleXSpan:x軸ズーム
- styleSpan:テキストスタイル
- TypefaceSpan:テキストフォントタイプ
- TextApearanceSpan:テキストの外観
- UnderlineSpan:下線
- StrikeThroughSpan:取り消し線
- SuperscriptSpan:上付き文字
- SubscriptSpan:添え字
- ImageSpan:写真
著者:CharmingWong
リンク:https://www.jianshu.com/p/472fd3e32324
出典:ジェーンの本
は著者が著作権を所有しています。商用の再版の場合は、著者に連絡して許可を求めてください。非商用の再版の場合は、出典を示してください。