Так что в настоящее время у меня есть приложение, которое отлично выглядит на моем устройстве, , что я вижу , но на другом устройстве Это выглядело как это . Оба устройства android, и я использовал предустановку FontSize (micro, small, default, large).
Я использовал вариант this , но не могу заставить его работать некорректно , Выходит как это . Я на самом деле обнаружил, что если я разделю результат на 2, это на самом деле даст приличный результат, но я хочу убедиться, что я не делаю ничего принципиально неправильного или если есть гораздо более простой способ!
Вот моя метка 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;
}
}