我正在使用WebView显示多个外部网站,每个网站都有其独特/不同的字体我想在每个网站上显示我的自定义字体,这些字体加载在我的应用程序的WebView中,以便应用程序在每个页面上看起来相同。
我想用1个单一字体显示每个网站。
iOS和Android有不同的font-family。例如,他们不支持MicrosoftYaHei。在iOS中,dafault字体是Helvetica,在android中是Droid Sans。所以我不建议你这样做。
如果您确实想要实现它,可以使用CustomRenderer
在两个平台中进行设置。
在iOS中
using System;
using Foundation;
using UIKit;
using xxx;
using xxx.iOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly:ExportRenderer(typeof(WebView),typeof(MyWebViewRenderer))]
namespace xxx.iOS
{
public class MyWebViewRenderer:WebViewRenderer,IUIWebViewDelegate
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if(NativeView!=null)
{
WeakDelegate = this;
}
}
[Export("webViewDidFinishLoad:")]
public void LoadingFinished(UIWebView webView)
{
NSString htmlStr = new NSString("document.getElementsByTagName('body')[0].style.fontFamily='PingFangSC-Light';");
webView.EvaluateJavascript(htmlStr);
}
}
}
在Android中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Webkit;
using Android.Widget;
using xxx;
using xxx.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(Xamarin.Forms.WebView), typeof(MyWebViewRenderer))]
namespace xxx.Droid
{
public class MyWebViewRenderer:WebViewRenderer
{
public MyWebViewRenderer(Context context):base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if(Control!=null)
{
Android.Webkit.WebView webview =(Android.Webkit.WebView) Control;
WebSettings settings = webview.Settings;
settings.JavaScriptEnabled = true;
webview.SetWebViewClient(new JavascriptWebViewClient());
}
}
}
public class JavascriptWebViewClient : WebViewClient
{
public override void OnPageFinished(Android.Webkit.WebView view, string url)
{
base.OnPageFinished(view, url);
view.EvaluateJavascript("javascript:document.getElementsByTagName('body')[0].style.fontFamily='xxx';", null);
}
}
}