首页 > 解决方案 > 如何在 Xamarin.Form 项目中替换已弃用的 Android“Context.Resources.UpdateConfiguration”?

问题描述

我正在使用这个 Android API Context.Resources.UpdateConfiguration(Configuration, DisplayMetrics),但它已被弃用,因此它在更高版本的 Android 系统中不起作用。我在网上进行了研究,但只找到了 Java 解决方案,我无法在我的 Xamarin.Form 项目中将其翻译成 C#。

谷歌文档说它已更新为 Context.CreateConfigurationContext(Configuration),但这对我不起作用(当然,DisplayMetrics 甚至没有进化)。

    public void SetStandardFontSize()
    {
        Configuration configuration = Android.App.Application.Context.Resources.Configuration;
        configuration.FontScale = (float)1;
        DisplayMetrics metrics = new DisplayMetrics();
        (MainActivity.mainContext as MainActivity).WindowManager.DefaultDisplay.GetMetrics(metrics);
        metrics.ScaledDensity = configuration.FontScale * metrics.Density;

        //deprecated
        Android.App.Application.Context.Resources.UpdateConfiguration(configuration, metrics);   
    }

我只想使用上面的功能(从stackoverflow帖子中学习)来覆盖Android系统中用户自定义的字体大小设置。所以我正在寻找一种正确的方法来更新与所有版本的Android系统兼容的配置。

非常感谢。

PS:Android.App.Application.Context.Resources.DisplayMetrics.SetTo(metrics); Android.App.Application.Context.Resources.Configuration.SetTo(configuration); 这仅适用于 Android 6,与已弃用的功能相同。

标签: c#androidxamarin.formsxamarin.android

解决方案


我不知道确切原因,但它就是这样工作的,

    protected override void AttachBaseContext(Context @base)
    {
        Configuration overrideConfiguration = new Configuration();
        overrideConfiguration = @base.Resources.Configuration;
        overrideConfiguration.SetToDefaults();
        Context context = @base.CreateConfigurationContext(overrideConfiguration);
        base.AttachBaseContext(context);
    }

    public override Resources Resources
    {
        get
        {
            Resources res = base.Resources;
            Configuration config = new Configuration();
            config.SetToDefaults();

            res.UpdateConfiguration(config, res.DisplayMetrics);
            return res;
        }
    }

我希望也许有人可以为我解释,但更重要的是,我希望它对其他人有用作为参考。


推荐阅读