Favour Emmanuel
Favour Emmanuel

Reputation: 121

How do I resolve WebViewRenderer is obsolete

This is what i get as error "WebViewRenderer.WebViewRenderer() is Obsolete

"This constructor is obsolete as of version 2.5. Please use the WebViewRenderer(Context) instead

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.Widget;
using Xamarin.Forms;
using ZoomWebView;
using Xamarin.Forms.Platform.Android;
using ZoomWebView.Droid;
using System.ComponentModel;
using Android.Webkit;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
using Xamarin.Forms.Internals;
using System.Threading.Tasks;

[assembly: ExportRenderer(typeof(MyWebView), typeof(MyWebViewRenderer))]


  namespace ZoomWebView.Droid
 {
     public class MyWebViewRenderer : WebViewRenderer
{

    protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
    {
        base.OnElementChanged(e);
        if (e.OldElement != null || Element == null)
        {
            return;
        }
        var element = Element as MyWebView;
        Control.Settings.TextZoom = element.ZoomInLevel;
    }

    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if(Control != null)
        {
            Control.Settings.BuiltInZoomControls = true;

            Control.Settings.DisplayZoomControls = true;
        }
        var element = Element as MyWebView;
        Control.Settings.TextZoom = element.ZoomInLevel;
        base.OnElementPropertyChanged(sender, e);
    }
}

I expected the Code to run Because i followed a particular series on youtube But it's not. Please is there any thing i am doing wrong ?

Upvotes: 3

Views: 3599

Answers (2)

FreakyAli
FreakyAli

Reputation: 16562

The reason it happened is quite simple Xamarin.Forms as of v2.4 marked Xamarin.Forms.Forms Context property as obsolete. So to get global context for renderer's it is necessary that you call the base class of that renderer meaning in your constructor you do the following:

public MyWebViewRenderer(Context context) : base(context)
{

}

XF now recommends you use James Montemagno's Current Activity Plugin. If you need the current context

Upvotes: 1

Bruno Caceiro
Bruno Caceiro

Reputation: 7199

You need to add the context:

public MyWebViewRenderer(Context context) : base(context)
{
}

In your code:

  namespace ZoomWebView.Droid
 {
    public class MyWebViewRenderer : WebViewRenderer
    {
        public MyWebViewRenderer(Context context) : base(context)
        {
        }


        protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
        {
            base.OnElementChanged(e);
            if (e.OldElement != null || Element == null)
            {
                return;
            }
            var element = Element as MyWebView;
            Control.Settings.TextZoom = element.ZoomInLevel;
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if(Control != null)
            {
                Control.Settings.BuiltInZoomControls = true;

                Control.Settings.DisplayZoomControls = true;
            }
            var element = Element as MyWebView;
            Control.Settings.TextZoom = element.ZoomInLevel;
            base.OnElementPropertyChanged(sender, e);
        }
    }
 }

Upvotes: 9

Related Questions