【问题标题】:Xamarin Forms: Letter spacing in Label TextXamarin Forms:标签文本中的字母间距
【发布时间】:2017-05-17 18:05:58
【问题描述】:

您好,我正在使用 Xamarin 表单 PCL 构建跨平台应用程序。在该应用程序中,我需要为标签文本添加字母间距。 我需要标签文本字符之间的空格。有没有办法在所有平台上实现这一点。 Letterspacing 属性在 ANDROID 中可用,但我需要适用于所有平台(如 ios、uwp、win8/8.1)的解决方案。

【问题讨论】:

  • 但是为什么你的标题对我们大喊大叫?
  • @Mureinik 它没有对任何人大喊大叫。
  • 现在你已经编辑好了。谢谢!
  • @Mureinik 谢谢你的意见。
  • @Mureinik 对此有何帮助?

标签: xamarin.forms label portable-class-library


【解决方案1】:

表单控件

public class LetterSpacingLabel : Label
{
    public float LetterSpacing { get; set; }
}

Android 渲染器代码如下:

public class LetterSpacingLabelRenderer : LabelRenderer
{
    protected LetterSpacingLabel LetterSpacingLabel { get; private set; }

    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement == null)
        {
            this.LetterSpacingLabel = (LetterSpacingLabel)this.Element;
        }

        var letterSpacing = this.LetterSpacingLabel.LetterSpacing;
        this.Control.LetterSpacing = letterSpacing;

        this.UpdateLayout();
    }
}

iOS 渲染器

    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);
        var data = Element as LetterSpacingLabel;
        if (data == null || Control == null)
        {
            return;
        }

        var text = Control.Text;
        var attributedString = new NSMutableAttributedString(text);

        var nsKern = new NSString("NSKern");
        var spacing = NSObject.FromObject(data.LetterSpacing * 10);
        var range = new NSRange(0, text.Length);

        attributedString.AddAttribute(nsKern, spacing, range);
        Control.AttributedText = attributedString;
    }

以下代码示例演示了如何使用 LetterSpacingLabel 控件:

< LetterSpacingLabel LetterSpacing="0.5" Text="Lorem ipsum dolor sit amet" />

以下截图显示iOS上的标签

来自here的帖子

【讨论】:

  • 参见Custom Renderer / Customizing an Entry 页上的示例代码“在iOS/Android 上创建自定义渲染器”,其中显示了所需的using 声明和[assembly: ExportRenderer( typeof( LabelRenderer ), typeof( LetterSpacingLabelRenderer ) )] 注释。您可能还需要 using 声明 1) namespaceLetterSpacingLabel 和 2) namespaceLetterSpacingLabelRenderer (因为 assembly 注释在命名空间行上方,而不是在命名空间“内部” )。
  • 更正:[assembly: ExportRenderer( typeof( LetterSpacingLabel ), typeof( LetterSpacingLabelRenderer ) )]
【解决方案2】:

自 4.4 版以来,Xamarin.Forms 现在具有 CharacterSpacing 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多