[因此,我目前有一个应用在我的设备上看起来不错what I see,但在另一台设备上看起来像this。两种设备都是android,并且我使用了预设的FontSize(微型,小型,默认,大型)。
我使用了this的变体,但我无法使其正常工作,它的出现类似于this。我实际上发现,如果将结果除以2,实际上会得到decent结果,但是我想确保我没有做任何根本上错误的事情,或者如果有更简单的方法!
这是我的xaml标签,每个标签都位于网格中的一帧中,每行给定空格的1/5。
<Frame Grid.Row="4" Grid.Column="0"
BorderColor="Gold" BackgroundColor="black"
Padding="2" Margin="0">
<Label Text="Player Search" TextColor="Gold" FontSize="Default"
BackgroundColor="Transparent" Padding="0" Margin="0"
ClassId="results" x:Name="PlayerSearchLbl"
HorizontalTextAlignment="Center" VerticalTextAlignment="Center"
HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="Button_Pressed"/>
</Label.GestureRecognizers>
</Label>
</Frame>
我的GetMaxFont函数,基本上来自教程
public int GetMaxFontSize(Label label)
{
double lineHeight = Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Android ? 1.2 : 1.3;
double charWidth = 0.5;
label.Text = String.Format(label.Text, lineHeight, charWidth, label.Width, label.Height);
int charCount = label.Text.Length;
int fontSize = (int)Math.Sqrt (label.Width * label.Height / (charCount * lineHeight * charWidth));
return fontSize;
}
并且如果需要,我在最大字体大小之间循环以获取最小字体,并将所有标签设置为相同字体。
private void SetFont()
{
int minFontSize = 10000;
foreach(Label label in labelList)
{
int fontSize = fontSizeController.GetMaxFontSize(label);
if (fontSize < minFontSize)
{
minFontSize = fontSize;
}
}
foreach(Label label in labelList)
{
label.FontSize = minFontSize;
}
}
[似乎该功能正在Xamarin 4.6 Pull 7981中为Android实现。