我正在对Label
的翻译进行动画处理,以在文本太长而无法显示时水平滚动它,但是我遇到了问题...当我使用{时,标签会截断长文本{1}},使滚动变得毫无意义。
LineBreakMode="NoWrap"
我尝试将MinimumWidthRequest设置为一个非常大的数字,但没有帮助。
如何使标签的宽度扩展到文本的总长度并禁止截断?
答案 0 :(得分:1)
NoWrap –不换行,仅显示一行中可以容纳的所有文本
因此,如果您的内容太长,它仍会截断。
如果要让长文本标签显示在一行上并可以自动滚动。
您可以写一个CustomRenderer以达到效果。
创建自定义 MarqueeLabel :
public class MarqueeLabel :Label
{
}
在Android.Project中创建自定义TextView MaqueeText :
class MaqueeText :TextView
{
protected MaqueeText(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public MaqueeText(Context context) : base(context)
{
}
public MaqueeText(Context context, IAttributeSet attribute) : base(context,attribute)
{
}
public MaqueeText(Context context, IAttributeSet attribute,int style) : base(context,attribute,style)
{
}
public override bool IsFocused => true;
}
在Android.Project中创建自定义渲染器 MaqueeTextRenderer :
[assembly: ExportRenderer(typeof(MarqueeLabel), typeof(MaqueeTextRenderer))]
namespace App18.Droid
{
class MaqueeTextRenderer :LabelRenderer
{
Context context;
public MaqueeTextRenderer(Context context) : base(context)
{
this.context = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (Control != null)
{
MaqueeText maqueeText = new MaqueeText(context);
maqueeText.SetSingleLine(true);
maqueeText.SetMarqueeRepeatLimit(-1);
maqueeText.Ellipsize = TextUtils.TruncateAt.Marquee;
maqueeText.Text = e.NewElement.Text;
SetNativeControl(maqueeText);
}
}
}
}
在ios中,类似于Android,您可以安装NugetPackage MarqueeLabel.iOS 。然后在自定义渲染器中安装
: [assembly: ExportRenderer(typeof(MarqueeLabel), typeof(MarqueeLabelRenderer))]
namespace Test.Forms.App.iOS.Renderer
{
public class MarqueeLabelRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
var x = new MarqueeLabel.iOS.MarqueeLabel();
SetNativeControl(x);
base.OnElementChanged(e);
}
}
}
最后在您的page.axml中:
<local:MarqueeLabel Text="asdsdsaddsdjkfkjfldjfdfjldkfsdkf;kfd;kdf;sdkf;skf;skf;sdkf;dkf;fk;dfk;dfk;fk;fk;fk;dfk;fkfsdfk"></Label>