我正在使用User_Status_Types
和DisplayMetrics
计算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中获取此转换因子,而不是从两个属性的商中推断出它的值?