三星 Tizen.Net 可穿戴设备,如何动态控制对象字体大小
Samsung Tizen.Net Wearable, How to control object font size dynamically
当使用包含文本的对象(例如按钮或标签)时,如何动态调整文本的大小以便更好地将不同长度的文本保持在可视区域内?
例如,如果 Label
在 CirclePage
的 CircleListView
中的 Cell
中并且文本变得太长,它很容易从视图中消失:
对于我正在寻找的上下文,在 Android 中,我可以给一个对象一个 autoSizeMinTextSize
and/or 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;
}
}
};
当使用包含文本的对象(例如按钮或标签)时,如何动态调整文本的大小以便更好地将不同长度的文本保持在可视区域内?
例如,如果 Label
在 CirclePage
的 CircleListView
中的 Cell
中并且文本变得太长,它很容易从视图中消失:
对于我正在寻找的上下文,在 Android 中,我可以给一个对象一个 autoSizeMinTextSize
and/or 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;
}
}
};