c# - 如何替换 Xamarin.Form 项目中已弃用的 Android "Context.Resources.UpdateConfiguration"?

标签 c# android xamarin.forms xamarin.android

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

Google 文档说它已更新为 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 系统兼容的正确更新配置的方法。

非常感谢。

附言: Android.App.Application.Context.Resources.DisplayMetrics.SetTo(指标); Android.App.Application.Context.Resources.Configuration.SetTo(配置); 这仅适用于 Android 6,与已弃用的功能相同。

最佳答案

我不知道为什么,但就是这样,

    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;
        }
    }

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

关于c# - 如何替换 Xamarin.Form 项目中已弃用的 Android "Context.Resources.UpdateConfiguration"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57227119/

相关文章:

c# - 使用 CSS 样式将从数据库中检索到的图像显示为列表

c# - 访问泛型类型的静态嵌套类

javascript - Android webView,正确显示CSS

android - 如何在后台服务中持续检查互联网范围?

Android:如何获取服务接收到的 Intent ?

ListView 分隔符插入全宽

ios背景图像大小和xamarin命名

c# - 通过 WCF 抛出异常的正确方法

c# - 如何像在 stackoverflow 中那样执行 OpenId 实现

c# - Xamarin HttpClient 请求超时