【发布时间】:2017-02-21 02:15:43
【问题描述】:
我在我的 Android 应用程序中创建了一个自定义 LabelRenderer,以便在 Xamarin Android 应用程序 (https://developer.xamarin.com/guides/xamarin-forms/user-interface/text/fonts/) 中应用自定义字体。
一切都适用于将内容添加到 .Text 属性的普通标签。但是,如果我使用 .FormattedText 属性创建标签,则不会应用自定义字体。
有人成功过吗?一个选项,因为我只是堆叠不同大小的文本行,是为每个使用单独的标签控件,但如果可能的话,我更喜欢使用格式化的字符串。
这是我的自定义渲染器的内容:
[assembly: ExportRenderer (typeof (gbrLabel), typeof (gbrLabelRenderer))]
public class gbrLabelRenderer: LabelRenderer
{
protected override void OnElementChanged (ElementChangedEventArgs<Label> e)
{
base.OnElementChanged (e);
var label = (TextView)Control;
Typeface font = Typeface.CreateFromAsset (Forms.Context.Assets, "Lobster-Regular.ttf");
label.Typeface = font;
}
}
这是我的简单标签控件...它所做的只是将字体应用到 iOS,然后将 Android 的字体应用到自定义渲染器。
public class gbrLabel: Label
{
public gbrLabel ()
{
Device.OnPlatform (
iOS: () => {
FontFamily = "Lobster-Regular";
FontSize = Device.GetNamedSize(NamedSize.Medium,this);
}
}
}
适用于仅具有 .Text 属性的标签...但不适用于具有 .FormattedText 属性的标签。
我应该继续挖掘,还是只是堆叠我的标签,因为在这种情况下这是一种选择?
这是我在格式化文本中尝试过的各种方法的示例,因为这是要求的:
var fs = new FormattedString ();
fs.Spans.Add (new Span {
Text = string.Format("LINE 1\n",Title),
FontSize = Device.GetNamedSize(NamedSize.Large,typeof(Label))
});
fs.Spans.Add (new Span {
Text = string.Format ("LINE 2\n"),
FontSize = Device.GetNamedSize(NamedSize.Large,typeof(Label)) * 2,
FontAttributes = FontAttributes.Bold,
FontFamily = "Lobster-Regular"
});
fs.Spans.Add (new Span {
Text = string.Format ("LINE 3\n"),
FontSize = Device.GetNamedSize(NamedSize.Medium,typeof(Label)),
FontFamily = "Lobster-Regular.ttf"
});
gbrLabel lblContent = new gbrLabel {
FormattedText = fs
}
这些(第一个应该由默认类/渲染器设置,第二个是在跨度定义本身中包含字体的变体)都不适用于 Android。
【问题讨论】:
-
没错,它非常相似......不过,没有人对这个问题给出一个好的答案。我以前从来没有问过骗子——我可以把我的问题移到那里来更新一下吗?
-
你从那个答案中遗漏了什么?您可以为每个跨度设置字体。或者您的目标是在后台为所有标签设置字体,这样您就不必手动设置?
-
这适用于 iOS,但您不能在 Android 的跨度(或 Xamarin.Forms 中的任何位置)中设置字体。您需要自定义渲染器,但它似乎仅在您使用 .Text 属性时才有效,而不是 .FormattedText 属性,即使您希望所有文本都是相同的字体,只是大小不同。作为旁注,我确实想要所有标签的基本字体,但这很容易实现。这里的问题完全集中在 .FormattedText 属性和为 Android 平台设置字体。
-
能否请您展示一下您是如何设置 FormattedText 以及格式化文本是什么?
标签: xamarin xamarin.ios xamarin.android