关于Xamarin的那些坑
第一次用xamarin来开发app,真的很鸡肋,处处充满了坑,总是会莫名其妙的报错,现在来记录一下自己开发中出现的一些比较难解决的问题
- xamarin安卓端的字体会随着手机系统本身的设置而跟着变大变小,这个会比较影响应用的使用体验,这个可以在安卓项目的MainActivity类里面定义一个方法并在OnCreated()里调用:
private void initFontScale()
{
//var config = Android.App.Application.Context.Resources.Configuration;
//config.FontScale = 1.00f; ;
//DisplayMetrics metrics = new DisplayMetrics();
//WindowManager.DefaultDisplay.GetMetrics(metrics);
//BaseContext.Resources.UpdateConfiguration(config, metrics);
using (var resources = this.BaseContext.Resources)
{
using (var config = this.BaseContext.Resources.Configuration)
{
config.FontScale = 1.00f;
DisplayMetrics metrics = new DisplayMetrics();
resources.UpdateConfiguration(config, metrics);
}
}
}
2. PS:如果你的xamarin项目里面嵌入了webview页面之后,Webview里面的页面字体也会随着手机系统字体而变大,上面那段代码对webvew页面并没什么用,因此得单独设置,我这里的做法是在安卓端新建一个WebView的渲染器,并在渲染器里面加上以下圈起来的代码
3、如果你从webview页面退出去之后,你会发现,xamairn里面的字体又变乱了,所以你又得重新调用一次第一步的代码,这里需要在安卓项目里面定义一个接口和一个类去继承接口服务进行调用,不然你在页面无法执行第一步的代码,定义服务之后,在MainPage页面出现之后引用该服务
很遗憾的是后面发现上面这个方法会影响到listview控件的使用,所以最终没有采纳,后面偶然之间发现另外一个乐于分享的网友分享了一个自己的解决方案:
具体的做法是:
我们只需要重写一个 AttachBaseContext 方法, 把其中的Context覆盖即可, 方法如下。
protected override void AttachBaseContext(Context @base)
{
Configuration config = new Configuration();
config = @base.Resources.Configuration;
config.FontScale = 1.00f;
Context context = @base.CreateConfigurationContext(config);
base.AttachBaseContext(context);
}
参考链接https://www.cnblogs.com/zh7791/p/12522651.html
感谢乐于分享的那位朋友
后面查阅了文档,找到可以禁止ios平台字体随苹果系统变大的方法,但是iOS默认的弹窗无法控制,其他字体可以控制住