c# - 如何在 Xamarin.Form 项目中替换已弃用的 Android“Context.Resources.UpdateConfiguration”?
问题描述
我正在使用这个 Android API Context.Resources.UpdateConfiguration(Configuration, DisplayMetrics),但它已被弃用,因此它在更高版本的 Android 系统中不起作用。我在网上进行了研究,但只找到了 Java 解决方案,我无法在我的 Xamarin.Form 项目中将其翻译成 C#。
谷歌文档说它已更新为 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系统兼容的配置。
非常感谢。
PS:Android.App.Application.Context.Resources.DisplayMetrics.SetTo(metrics); Android.App.Application.Context.Resources.Configuration.SetTo(configuration); 这仅适用于 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# - 脚本之间的通信不起作用,
- html - scss 中的混合错误:没有名为响应的混合。即使mixin定义明确。为什么会发生这种情况?
- javascript - 表单验证停止后javascript函数不起作用
- c# - 如何在 c# 中使用 EF 来使用 localDb 而不会丢失数据
- android - 图像和视频的后端设置以在 android 应用程序中下载和使用
- r - 我在 R 中安装 BiocManager 并且需要很长时间?这是为什么?
- javascript - 为什么 document.getElementById('output').innerHTML.value 返回“未定义”?
- python - PyCharm not seeing PyYAML with Pipenv
- javascript - 无法从不同组件的函数体内更新组件 - React Native?
- python - 如何计算字符串的唯一字符集?