如何在 xamarin 表单中的单个标签上使用不同的字体大小

问题描述

我想在这里实现这个特殊的结果

enter image description here

我遇到过不同的结果,但不是很好。我尝试使用 split() 进行分离,然后设置字体大小,将它们重新组合在一起。这是一个漫长的过程,我想做得更好。 请任何知道如何解决这个问题的人都应该帮助我。

解决方法

您可以使用 FormattedString。

对于固定数量的文本块 xml

<Label>
   <Label.FormattedText>
      <FormattedString>
         <Span Text="{Binding chunk1}" TextColor="Green" FontSize="10"/>
         <Span Text="{Binding chunk2}" TextColor="Green" FontSize="15"/>
         <Span Text="{Binding chunk3}" TextColor="Red" FontSize="10"/>
      </FormattedString>
   </Label.FormattedText>
</Label>

如果您的文本块数量不固定。

<Label FormattedText="{Binding TextChunks}" />

视图模型

public FormattedString TextChunks
{
   get
   {
      return new FormattedString
      {
         //You can add a loop here any many as the number of text chunks
         Spans = 
         {
            new Span { Text = "chunk1",TextColor=Color.Green,FontSize = 10 },new Span { Text = "chunk2",TextColor=Color.Red,FontSize = 15 },new Span { Text = "chunk3",FontSize = 10},new Span { Text = "chunk4",FontSize = 15},new Span { Text = "chunk5",FontSize = 18},}
      }
   }
}
,

如 Jason 所说,FormattedTextHTML 都有效。

对于 FormattedText,您可以查看 MS 文档。 https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/text/label#formatted-text

对于 HTML,在标签中显示 HTML 仅限于底层平台支持的 HTML 标签。在 XAML 中,由于额外转义 符号,HTML 字符串可能变得不可读。

我建议使用 HTML Label Plugin

NuGet 包:https://www.nuget.org/packages/Xam.Plugin.HtmlLabel

xml:

  <htmlLabel:HtmlLabel x:Name="htmlLabel" />

代码hebind:

 htmlLabel.Text = "<span  style='color: green'><small>N52,</small></span><span style='color:green'><big>O3O.</big></span><span style='color:red'><small>60</small></span>";

截图:

enter image description here

不要忘记在 MainActivity 中添加以下代码。

 HtmlLabelRenderer.Initialize();

更新:

   string NO1 = "N52,";
        string NO2 = "O3O.";
        string NO3 = "60";
        htmlLabel.Text = "<span  style='color: green'><small>" + NO1 + "</small></span><span style='color:green'><big>" + NO2 + "</big></span><span style='color:red'><small>"+NO3+"</small></span>";