gpt4 book ai didi

xaml - Xamarin 表单标签 - 合理吗?

转载 作者:行者123 更新时间:2023-12-02 18:05:19 26 4
gpt4 key购买 nike

我只是想问是否有办法在标签对齐文本。我正在使用 Xamarin Forms Xaml。

谢谢。

更新:目前还无法调整文本。大多数答案都是关于将文本居中,但这不是我问的。一种方法是使用 Timothy 的 Renderer。

最佳答案

虽然您无法使用 Xamarin.Forms 功能将标签的文本拉伸(stretch)到完整宽度,但可以使用平台渲染器轻松实现。

Android text justification in Xamarin.Froms label

大多数 Xamarin 平台都在相应的 native 元素中提供了文本对齐功能,只需设置 native 元素的单个属性即可。我认为不将此功能添加到标准 Xamarin.Forms 标签的原因是该功能的平台滞后,例如Android 仅在版本 8.1 中添加了 Android.Text.JustificationMode.InterWord 标志

下面你可以看到 Android 渲染器的实现:

using Android.Content;
using Saplin.CPDT.UICore.Controls;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(Saplin.CPDT.UICore.Controls.ExtendedLabel), typeof(Saplin.CPDT.Droid.ExtnededLabelRenderer))]
namespace Saplin.CPDT.Droid
{
public class ExtnededLabelRenderer : Xamarin.Forms.Platform.Android.LabelRenderer
{
public ExtnededLabelRenderer(Context context) : base(context)
{
}

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

var el = (Element as ExtendedLabel);

if (el != null && el.JustifyText)
{
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
{
Control.JustificationMode = Android.Text.JustificationMode.InterWord;
}

}
}
}
}
  1. 您在 native 项目中创建渲染器类
  2. 您添加程序集:ExportRenderer属性
  3. 您设置 TextView 的 JustificationMode

在我的示例中,我使用 Xamarin.Forms.Label 的 ExtenedLabel 子类以及额外的 JustifyText 属性来设置文本的对齐方式。这就是声明子类控件的方式:

using System;
using Xamarin.Forms;

namespace Saplin.CPDT.UICore.Controls
{
public class ExtendedLabel : Label
{
public static readonly BindableProperty JustifyTextProperty =
BindableProperty.Create(
propertyName: nameof(JustifyText),
returnType: typeof(Boolean),
declaringType: typeof(ExtendedLabel),
defaultValue: false,
defaultBindingMode: BindingMode.OneWay
);

public bool JustifyText
{
get { return (Boolean)GetValue(JustifyTextProperty); }
set { SetValue(JustifyTextProperty, value); }
}
}
}
  • WPF 的平台渲染器示例和 macOS .

关于xaml - Xamarin 表单标签 - 合理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30062368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com