Control.SetText不会更改ButtonRenderer中的文本

时间:2019-07-29 19:54:32

标签: xamarin.forms xamarin.android

我正在尝试使用 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

的结果

enter image description here

这是 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 属性中显示原始文本集。

enter image description here

有人经历过吗?不知道这是否是错误。

预先感谢您的回答。

1 个答案:

答案 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}}