多行阿拉伯文本的 StaticLayout 高度不准确

StaticLayout inaccurate height for multi-line Arabic text

我正在尝试以编程方式计算文本所需的高度,因此我使用的是 StaticLayout。

我正在使用其绘制对象对标签 (TextView) 进行试验,以确保计算出的高度与 Android 呈现的 TextView 的高度相同。

它适用于阿拉伯语和英语的单行文本,也适用于英语的多行文本,但阿拉伯语高度关闭,它总是比 Android 呈现的短。

顶部高度~80是TextView的高度,而后者~75是需要计算的高度。

因为它在英语中运行良好,我想我可能需要设置一些其他的 属性 或其他东西,但我不知道是什么。

以下是我的代码,因为我使用的是 Xamarin,所以它在 C# 中,但对于 Android 开发人员来说应该很清楚。

Control 是 TextView。

        double getTextHeight(string str, double widthConstraint)
        {
            if (Control == null || String.IsNullOrWhiteSpace(str))
                return 0;

            var builder = StaticLayout.Builder.Obtain(str, 0, str.Length, Control.Paint, (int)widthConstraint);
            builder.SetAlignment(Control.Layout.GetAlignment());
            builder.SetIncludePad(true);
            builder.SetLineSpacing(Control.Layout.SpacingAdd, Control.Layout.SpacingMultiplier);
            builder.SetBreakStrategy(Control.BreakStrategy);
            builder.SetJustificationMode(Control.JustificationMode);
            builder.SetHyphenationFrequency(Control.HyphenationFrequency);

            var staticLayout = builder.Build();
            return staticLayout.Height;
        }

这是我遗漏的代码,它工作起来很有魅力:)

builder.SetUseLineSpacingFromFallbacks(true);