测量Xamarin表单中的字符串大小(Android)
在我的应用程序中,我有一个按钮,带有固定的with(当前为100)。给定一个字符串值,我试图设置此按钮的字体大小,以便整个字符串可以放在一行上 我已经为这个按钮创建了一个自定义按钮和一个渲染器。我在渲染器的测量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
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
来调整不同的屏幕