Замените шрифты стороннего веб-сайта на мои пользовательские шрифты, которые будут отображаться в моем приложении с помощью Xamarin Webview. - PullRequest
0 голосов
/ 25 апреля 2019

Я использую WebView для отображения нескольких внешних веб-сайтов, каждый веб-сайт имеет свои уникальные / разные шрифты. Я хочу отображать свой собственный шрифт на каждом веб-сайте, который загружен в WebView моего приложения, чтобы приложения выглядели одинаково на каждой странице.

Я хочу отображать каждый веб-сайт одним шрифтом.

1 Ответ

0 голосов
/ 26 апреля 2019

iOS и Android имеют разные семейства шрифтов. Например, они не поддерживают MicrosoftYaHei . В iOS шрифт по умолчанию имеет значение 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);
        }

    }


}
...