Xamarin表单:标签文本中的字母间距

时间:2017-01-03 15:38:29

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

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

2 个答案:

答案 0 :(得分:8)

表单控件

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

答案 1 :(得分:0)

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