💨
.NET MAUIだって文字に色付けたい!(Android)
小ネタです。
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