Применить изменение шрифта динамически на xamarin? - PullRequest
0 голосов
/ 24 апреля 2020

Добрый день. Я работаю над динамическими c изменениями размера и атрибутов шрифта в формах.

В данный момент я внес изменения в приложение, но они применяются только после создания страницы, но я бы хотел немедленно. Я использовал метод ForceLayout (), но он не помог, что еще можно использовать?

    [assembly: Dependency(typeof(ChangeFontAndroid))]
namespace SpecialForcesDirectory.Droid
{
    public class ChangeFontAndroid : IScaleFont
    {
        public void Scale(float val)
        {
            var configuration = Resources.System.Configuration;
            configuration.FontScale = (float)val;
            MainActivity.AppContext.Resources.Configuration.UpdateFrom(configuration);
            MainActivity.AppContext.Resources.DisplayMetrics.ScaledDensity = configuration.FontScale * (float)DeviceDisplay.MainDisplayInfo.Density;

        }
    }
}


1 Ответ

1 голос
/ 24 апреля 2020

Самый простой способ - использовать DynamicResources .

. Вы сохраняете эти ресурсы в своих ресурсах приложения, а затем используете их во всем приложении, меняя их в одном месте, и все они меняются. приложение.

Например, у вас в App.xaml размер шрифта как двойной:

 <x:Double x:Key="DefaultFontSize">20</x:Double>
 <x:Double x:Key="EnlargedFontSize">30</x:Double>

И у вас есть DynamicResource, который на основе условий присваивает себе некоторое значение:

 Resources ["DynamicFontSize"] =Condition ? Resources ["DefaultFontSize"]:Resources ["EnlargedFontSize"];

Приведенный выше код может быть где угодно при любом условии, где ресурсы Application.Current.Resources

Тогда, если у вас есть приведенный ниже код, он будет динамически изменен:

<Label FontSize= {DynamicResource DynamicFontSize}
<Button FontSize= {DynamicResource DynamicFontSize}

Работает со всеми свойствами, которые могут быть привязаны.

Goodluck, не стесняйтесь возвращаться, если у вас есть запросы.

...