[当使用包含文本的对象(例如按钮或标签)时,如何动态调整文本的大小以更好地将不同长度的文本保留在可见区域内?
例如,如果Label
的Cell
的CircleListView
内的CirclePage
太长,则文本很容易掉出来:
关于我要寻找的内容,在Android中,我可以为对象提供autoSizeMinTextSize
和/或autoSizeMaxTextSize
标签,这些标签将根据对象的文本长度自动调整字体大小。这样可以更好地将未知长度的文本保留在屏幕上。
[如何在可穿戴式或任何Tizen.Net应用程序中使用CircularUI
或Button
之类的Label
元素或通常使用Xamarin.Forms来做到这一点?
研究了一段时间之后,我学会了一些动态调整文本大小的方法。
以中心对齐的Label
:
PrimaryText = new Label
{
FontSize = _maxFontSize,
HorizontalTextAlignment = TextAlignment.Center,
};
[将其添加到布局中可以访问MeasureInvalidated
事件:
TextStack = new StackLayout
{
WidthRequest = _maxWidth,
Children = { PrimaryText }
};
然后,当文本更改(除其他事项外,事件将触发,您可以在其中测量新文本,将其与堆栈的宽度进行比较,然后调整字体大小,直到文本适合您的布局:
TextStack.MeasureInvalidated += (sender, args) =>
{
var primaryMeasure = PrimaryText.Measure(PrimaryText.Width, PrimaryText.Height);
var stackMeasure = TextStack.Measure(TextStack.Width, TextStack.Height);
if (primaryMeasure.Request.Width > stackMeasure.Request.Width)
{
if (PrimaryText.FontSize <= _minFontSize)
PrimaryText.HorizontalTextAlignment = TextAlignment.Start;
else
{
var fontSize = PrimaryText.FontSize - 2;
if (fontSize < _minFontSize)
fontSize = _minFontSize;
PrimaryText.FontSize = fontSize;
}
}
};