编辑2
编辑
覆盖attachBaseContext方法以更新activity中的上下文
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()被弃用,尝试以下方法:
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)
?注意,“当前实现”可以正常工作,但由于我们鼓励不使用已弃用的代码,所以想要替换为可行的方法。
base.AttachBaseContext(@base);
这里应该使用你的新上下文而不是 @base。 - Leo ZhuattachBaseContext
方法中:Configuration overrideConfiguration = @base.Resources.Configuration; overrideConfiguration.SetToDefaults(); Context context = CreateConfigurationContext(overrideConfiguration); base.AttachBaseContext(context);
然后在您的资源覆盖中调用以下代码:Resources res = context.Resources; return res;
- Leo Zhu@base
返回null?在这里我们是如何传递context的,应该是base.Resources
吗? - jtth