三星 Tizen.Net 可穿戴设备,如何动态控制对象字体大小

Samsung Tizen.Net Wearable, How to control object font size dynamically

当使用包含文本的对象(例如按钮或标签)时,如何动态调整文本的大小以便更好地将不同长度的文本保持在可视区域内?

例如,如果 LabelCirclePageCircleListView 中的 Cell 中并且文本变得太长,它很容易从视图中消失:

对于我正在寻找的上下文,在 Android 中,我可以给一个对象一个 autoSizeMinTextSize and/or autoSizeMaxTextSize 标签,它会自动调整字体大小大小基于对象的文本长度。 这允许未知长度的文本更好地保留在屏幕上。

如何在 Tizen.Net 应用程序中使用 CircularUI 元素(例如 ButtonLabel 或通常使用 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;
        }
    }
};