我正在尝试使用 ButtonRenderer 在Button中的文本上设置多种样式。在Android上,必须使用 Control.SetText()设置样式,但不会同时应用样式和文本。
奇怪的是,当我在 LabelRenderer 中使用相同的代码时,它按预期工作。
这是 LabelRenderer
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (Control == null || e.NewElement == null)
{
return;
}
var ce = (CustomLabel) e.NewElement;
var iconFont = Typeface.CreateFromAsset(Context.Assets, "fa-solid-900.ttf");
var spannableString = new SpannableStringBuilder();
var spannable = new SpannableString("");
spannableString.Append("Hello");
spannableString.Append(spannable, new CustomTypefaceSpan(iconFont), SpanTypes.ExclusiveInclusive);
Control.SetText(spannableString, TextView.BufferType.Spannable);
}
LabelRenderer
的结果这是 ButtonRenderer
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
base.OnElementChanged(e);
if (Control == null || e.NewElement == null)
{
return;
}
var ce = (AfButton) e.NewElement;
var iconFont = Typeface.CreateFromAsset(Context.Assets, "fa-solid-900.ttf");
var spannableString = new SpannableStringBuilder();
var spannable = new SpannableString(ce.IconText);
spannableString.Append(spannable, new CustomTypefaceSpan(iconFont), SpanTypes.ExclusiveInclusive);
spannableString.Append(ce.Text);
Control.SetText(spannableString, TextView.BufferType.Spannable);
}
ButtonRenderer 的结果,该结果在 Text 属性中显示原始文本集。
有人经历过吗?不知道这是否是错误。
预先感谢您的回答。
答案 0 :(得分:0)
使用以下代码
SpanTypes
将ExclusiveExclusive
设置为spannableString.Append(spannable, new CustomTypefaceSpan(iconFont), SpanTypes.ExclusiveExclusive);
CustomTypefaceSpan customTypefaceSpan = new CustomTypefaceSpan(typeface);
var spannableString = new SpannableString("Hello");
spannableString.SetSpan(customTypefaceSpan, 0, spannableString.Length(), SpanTypes.ExclusiveExclusive);
var span = new SpannableString("123456");
var spp = new SpannableStringBuilder();
spp.Append(spannableString);
spp.Append(span);
Control.SetText(spp, BufferType.Spannable);
{{1}}