💨

.NET MAUIだって文字に色付けたい!(Android)

2022/10/17に公開

小ネタです。

Labelに色を付ける

MAUIのデフォ機能でできる。
FormattedTextで、形式を決める感じ。

Label text_label = new Label();

text_label.FormattedText = new FormattedString();

var s1 = new Span();
s1.Text = "testtest";
text_label.FormattedText.Spans.Add(s1);

var s2 = new Span();
s2.Text = "test";
s2.TextColor = Brush.Red.Color; // 赤文字にする
text_label.FormattedText.Spans.Add(s2);

var s3 = new Span();
s3.Text = "test";
text_label.FormattedText.Spans.Add(s3);

layout0.Add(text_label);

Editorに色を付ける

MAUIのデフォ機能にはないので、ToPlatformを介して、TextViewで色付ける感じ。(MAUIのEditorの中身のAndroid実装は、TextViewで構成しているので、通用する手法)
Handler.MauiContextを使うので、事前にコントロールを描画させてください。
SizeChangedとかで更新掛ける感じで使うでヨシかも。

string text = "あいうえおかきくけこさしすせそ";

Android.Text.SpannableStringBuilder SS = new Android.Text.SpannableStringBuilder(text);

// 赤文字設定
SS.SetSpan(new Android.Text.Style.ForegroundColorSpan(Android.Graphics.Color.Red), 8, 8+4, Android.Text.SpanTypes.ExclusiveInclusive);

// Assetsの中身確認
//var names = Microsoft.Maui.ApplicationModel.Platform.AppContext.Assets.List("");

// フォント設定
var font = Android.Graphics.Typeface.CreateFromAsset( Microsoft.Maui.ApplicationModel.Platform.AppContext.Assets, "ReggaeOne-Regular.ttf") ;
SS.SetSpan(new Android.Text.Style.TypefaceSpan(font),8,8+4, Android.Text.SpanTypes.ExclusiveInclusive);


var item = (Android.Widget.TextView)TextEditor.ToPlatform(TextEditor.Handler.MauiContext);
item.SetText(SS.SubSequenceFormatted(0, SS.Length()), Android.Widget.TextView.BufferType.Spannable);

今回、Android.Text.SpannableStringBuilderを使っているが、詳細は 「Android公式:スパン」を参照。

ちなみに「Android.Text.SpanTypes.ExclusiveInclusive」については、文字の指定位置に関係する話らしい。
詳細は、これを参照。「Android公式:スパン - スパンを作成して適用する」

なお、AndroidのAssetsは、「埋め込みリソース」ではなく、MauiFontを見に行っているので注意。

オワリ!

見本

Discussion