如何使用Xamarin.Android在TextSize和FontSize之间来回转换?

时间:2018-01-03 15:35:51

标签: xamarin.forms xamarin.android

我正在使用User_Status_TypesDisplayMetrics计算FontMetrics的值,以便TextSize内的文字不大于按钮边界框。

Button

然后我认为使用DisplayMetrics displayMetrics = new DisplayMetrics(); Display.GetMetrics(displayMetrics); float scaledDensity = displayMetrics.ScaledDensity; TextPaint paint = new TextPaint(); paint.AntiAlias = true; Paint.FontMetrics metrics = null; Xamarin.Forms.Button button; MyButtonRenderer renderer = ((MyButtonRenderer)Platform.GetRenderer(button)); Android.Widget.Button control = renderer.Control; int maxFontSize = (int)renderer.defaultFontSize; string text = button.Text; Rect bounds = new Rect(); while (maxFontSize >= 0) { paint.SetTypeface(control.Typeface); paint.TextSize = scaledDensity * maxFontSize; paint.GetTextBounds(text, 0, text.Length, bounds); metrics = paint.GetFontMetrics(); if (bounds.Width() < control.MeasuredWidth && (metrics.Bottom - metrics.Top) < control.MeasuredHeight) { break; } maxFontSize--; } 为按钮设置属性maxFontSize会使文本具有适当的大小:

TextSize

虽然它不起作用,我不得不这样做:

renderer.Control.TextSize = maxFontSize * scaledDensity;

我使用float conversionScale = (float)renderer.Element.FontSize / renderer.Control.TextSize; float maxTextSize = maxFontSize * scaledDensity; renderer.Element.FontSize = maxTextSize * conversionScale; conversionScale转换为TextSize

有没有办法从API中获取此转换因子,而不是从两个属性的商中推断出它的值?

Also asked at the official forums

0 个答案:

没有答案