测量Xamarin表单中的字符串大小(Android)

测量Xamarin表单中的字符串大小(Android),android,xamarin.forms,Android,Xamarin.forms,在我的应用程序中,我有一个按钮,带有固定的with(当前为100)。给定一个字符串值,我试图设置此按钮的字体大小,以便整个字符串可以放在一行上 我已经为这个按钮创建了一个自定义按钮和一个渲染器。我在渲染器的OnSizeChanged方法中有以下代码 var textView = new TextView(Context); textView.TextSize = 10.0f; var bounds = new Rect(); textView.Paint.GetTextBounds(tex

在我的应用程序中,我有一个按钮,带有固定的with(当前为100)。给定一个字符串值,我试图设置此按钮的字体大小,以便整个字符串可以放在一行上

我已经为这个按钮创建了一个自定义按钮和一个渲染器。我在渲染器的
OnSizeChanged
方法中有以下代码

var textView = new TextView(Context);

textView.TextSize = 10.0f;

var bounds = new Rect();

textView.Paint.GetTextBounds(text, 0, text.Length, bounds);

var size = bounds.Width() / Resources.DisplayMetrics.ScaledDensity;
从一些尝试和错误的工作中,我知道如果我将按钮的字体大小设置为10.0,字符串将勉强适合按钮。但是,上面的代码报告,字体大小为10.0的字符串的大小(宽度)约为70.85(对于我的设备)。这似乎并没有计算出来,因为它比我预期的要小得多(我预期它会在95.0左右)


我遗漏了什么/做错了什么?

您可以尝试
TextViewCompat
。这样,您就不必计算确切的大小。 您可以尝试以下代码:

var nativeControl = Control;
nativeControl.SetMaxLines(1);

TextViewCompat.SetAutoSizeTextTypeWithDefaults(nativeControl, TextViewCompat.AutoSizeTextTypeUniform);
TextViewCompat.SetAutoSizeTextTypeUniformWithConfiguration(nativeControl, 1, 18, 1, (int)ComplexUnitType.Sp);
结果:

注意:

1.上图中,第一个按钮是通用按钮,第二个按钮是使用
ButtonRenderer
的自定义按钮

2.当我们检查文档时,我们将找到方法
SetAutoSizeTextTypeUniformWithConfiguration

setAutoSizeTextTypeUniformWithConfiguration(TextView textView, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
参数1是需要动态更改字体大小的TextView,参数2、3、4是最小字体大小、最大字体大小和缩放粒度,参数5是参数2、3、4的单位,如sp、dp、px等


我们可以调整参数:
autosizeminextsize
autosizemaxtsize
来调整不同的屏幕。

您可以尝试
TextViewCompat
。这样,您就不必计算精确的大小。 您可以尝试以下代码:

var nativeControl = Control;
nativeControl.SetMaxLines(1);

TextViewCompat.SetAutoSizeTextTypeWithDefaults(nativeControl, TextViewCompat.AutoSizeTextTypeUniform);
TextViewCompat.SetAutoSizeTextTypeUniformWithConfiguration(nativeControl, 1, 18, 1, (int)ComplexUnitType.Sp);
结果:

注意:

1.上图中,第一个按钮是通用按钮,第二个按钮是使用
ButtonRenderer
的自定义按钮

2.当我们检查文档时,我们将找到方法
SetAutoSizeTextTypeUniformWithConfiguration

setAutoSizeTextTypeUniformWithConfiguration(TextView textView, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
参数1是需要动态更改字体大小的TextView,参数2、3、4是最小字体大小、最大字体大小和缩放粒度,参数5是参数2、3、4的单位,如sp、dp、px等

我们可以调整参数:
autosizeminextsize
autosizemaxtsize
来调整不同的屏幕