不推荐使用Android Resources.UpdateConfiguration(Configuration,DisplayMetrics)

问题描述 投票:0回答:1

编辑2

sample

编辑

覆盖attachBaseContext方法以更新活动中的上下文

protected override void AttachBaseContext(Context @base)
{
    base.AttachBaseContext(@base);
}

结束编辑

在Android API 25中,Resources.UpdateConfiguration(Configuration, DisplayMetrics)已被弃用,建议使用Context context = CreateConfigurationContext(Configuration);代替。

目前的实施

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

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

引用Android context.getResources.updateConfiguration() deprecated作为指南,尝试以下方法:

public override Resources Resources
{
    get
    {
        Configuration overrideConfiguration = base.Resources.Configuration;
        overrideConfiguration.SetToDefaults();
        Context context = CreateConfigurationContext(overrideConfiguration);
        Resources res = context.Resources;
        return res;
    }
}

但是这会产生异常错误。

Android.Views.InflateException: Error inflating class
com.android.internal.widget.DialogTitle

如何正确实施Context context = CreateConfigurationContext(Configuration)

注意'当前实现'完全正常,但鼓励不使用已弃用的代码想要替换工作

c# android xamarin.android
1个回答
1
投票

不确定是否是你的需要,你可以改变这样的attachBaseContext方法,它可以工作:

protected override void AttachBaseContext(Context @base)
    {
        Configuration overrideConfiguration = new Configuration();
        overrideConfiguration = @base.Resources.Configuration;
        overrideConfiguration.SetToDefaults();
        Context context = @base.CreateConfigurationContext(overrideConfiguration);
        base.AttachBaseContext(context);
    }
© www.soinside.com 2019 - 2024. All rights reserved.