2

编辑 2

样本

编辑

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

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

结束编辑

在 Android API 25Resources.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()作为指南已弃用,尝试了以下操作:

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)

注意“当前实现”工作得非常好,但鼓励不要使用不推荐使用的代码来替换工作

4

1 回答 1

2

不确定是否是您的需要,您可以像这样更改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);
    }
于 2019-04-26T01:32:48.720 回答