我正在使用XAML学习Xamarin表单来为应用程序创建界面。
有没有办法在Xamarin Forms中设置文本之间的间距?
我试图在xamarin网站上搜索它,但它只显示使用c#的解决方案。
答案 0 :(得分:0)
您可以创建一个转换器,它将字符串作为值并在Convert()方法中的字母之间添加空格。
答案 1 :(得分:0)
您必须在每个平台上制作自定义渲染器,以便为标签添加字距。
表格控制:
public class KerningLabel : Label
{
public static readonly BindableProperty KerningProperty = BindableProperty.Create(nameof(Kerning), typeof(double), typeof(KerningLabel), 0d);
public double Kerning
{
get { return (double)GetValue(KerningProperty); }
set { SetValue(KerningProperty, value); }
}
}
的iOS:
[assembly: ExportRenderer(typeof(KerningLabel), typeof(KerningLabelRenderer))]
namespace YourNamespace
{
public class KerningLabelRenderer : LabelRenderer
{
private NSString _kerningAttribureName = new NSString("NSKern");
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (e.NewElement != null && Control != null)
{
SetKerning();
}
}
private void SetKerning()
{
var element = Element as KerningLabel;
string text = Element.Text;
if (string.IsNullOrEmpty(text))
{
Control.Text = string.Empty;
}
else
{
var attributedString = new NSMutableAttributedString(text);
attributedString.AddAttribute(_kerningAttribureName, NSObject.FromObject(element.Kerning), new NSRange(0, text.Length - 1));
Control.AttributedText = attributedString;
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == Xaml.KerningLabel.KerningProperty.PropertyName ||
e.PropertyName == Label.TextProperty.PropertyName ||
e.PropertyName == Label.TextColorProperty.PropertyName)
{
SetKerning();
}
}
}
}
机器人:
[assembly: ExportRenderer(typeof(KerningLabel), typeof(KerningLabelRenderer))]
namespace YourNamespace
{
public class KerningLabelRenderer : LabelRenderer
{
public KerningLabelRenderer()
{
AutoPackage = false;
}
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if(e.NewElement != null && Control != null)
{
SetKerning();
}
}
private void SetKerning()
{
var element = Element as KerningLabel;
if (element != null && Control != null)
{
Control.Text = element.Text;
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
Control.LetterSpacing = (float)((element.Kerning) / 10.0f);
}
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == Xaml.KerningLabel.KerningProperty.PropertyName ||
e.PropertyName == Xaml.KerningLabel.TextProperty.PropertyName)
{
SetKerning();
}
}
}
此外,LetterSpacing属性仅在Android Lollipop设备上添加。