将第三方网站的字体替换为我的自定义字体,使用Xamarin Webview显示在我的应用程序中

问题描述 投票:0回答:1

我正在使用WebView显示多个外部网站,每个网站都有其独特/不同的字体我想在每个网站上显示我的自定义字体,这些字体加载在我的应用程序的WebView中,以便应用程序在每个页面上看起来相同。

我想用1个单一字体显示每个网站。

xamarin.forms webview xamarin.android xamarin.ios
1个回答
0
投票

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);
        }

    }


}
© www.soinside.com 2019 - 2024. All rights reserved.