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

时间:2019-04-10 22:09:18

标签: c# android xamarin.android

编辑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)

请注意,“当前实现”可以很好地运行,但是建议不要使用不推荐使用的代码来替换它

1 个答案:

答案 0 :(得分: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);
    }