【问题标题】:Apply font change dynamically on xamarin?在 xamarin 上动态应用字体更改?
【发布时间】:2020-04-24 03:56:32
【问题描述】:

下午好。我正在处理表单中的动态调整大小和字体属性。

目前,我对应用程序进行了更改,但它们仅在创建页面后应用,但我想立即应用。 我用了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;

        }
    }
}


【问题讨论】:

    标签: xamarin xamarin.forms xamarin.android


    【解决方案1】:

    最简单的方法是使用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}
    

    适用于所有可绑定的属性。

    如果您有任何疑问,欢迎随时回复。

    【讨论】:

    • 很好的解决方案。我首先尝试一下。但现在在项目中超过 50 个页面和 ~400 个控件。
    • 没关系,不管你有多少页面,它都会起作用,你只需要使用动态资源:)
    • 申请号对我来说是的。在许多位置替换 xaml 的许多猴子工作。在网络上找到你的文章,非常令人印象深刻。
    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多