Адаптивная справка шрифтов в Xamarin - PullRequest
0 голосов
/ 06 апреля 2020

Так что в настоящее время у меня есть приложение, которое отлично выглядит на моем устройстве, , что я вижу , но на другом устройстве Это выглядело как это . Оба устройства 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;  
        }
    }

1 Ответ

0 голосов
/ 07 апреля 2020

Похоже, эта функция находится в стадии реализации для Android в Xamarin 4.6 Pull 7981

...