Quantcast
Channel: Xamarin.Forms — Xamarin Community Forums
Viewing all articles
Browse latest Browse all 77050

WebView Custom Renderer Enable-Zoom Property

$
0
0

Hi, I've been trying to use a custom renderer for a webview becouse the default one doesn't include zoom.
I've added succesfully the zoom but I can't control whether zoom is enabled or not.
This is the code:

MyWebView.cs

using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace CofarLE_Ejemplo_5
{
    public class MyWebView : WebView
    {
        public int ZoomInLevel
        {
            get { return (int)GetValue(ZoomInLevelProperty); }
            set { SetValue(ZoomInLevelProperty, value); }
        }
        public bool EnableZoomControl
        {
            get { return (bool)GetValue(EnableZoomControlProperty); }
            set { SetValue(EnableZoomControlProperty, value); }
        }
        public static readonly BindableProperty ZoomInLevelProperty = BindableProperty.Create(propertyName: "ZoomInLevel", returnType: typeof(int), declaringType: typeof(MyWebView), defaultValue: 100, propertyChanged: OnZoomInLevelPropertyChanged);
        public static readonly BindableProperty EnableZoomControlProperty = BindableProperty.Create(propertyName: "EnableZoomControl", returnType: typeof(bool), declaringType: typeof(MyWebView), defaultValue: false, propertyChanged: OnEnableZoomChanged);

        private static void OnZoomInLevelPropertyChanged(BindableObject bindable, object oldValue, object newValue)
        {
            var control1 = (MyWebView)bindable;
            control1.ZoomInLevel = (int)newValue;
        }
        private static void OnEnableZoomChanged(BindableObject bindable, object oldValue, object newValue)
        {
            var control1 = (MyWebView)bindable;
            control1.EnableZoomControl = (bool)newValue;
        }


    }
}

MyWebViewRenderer.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
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 CofarLE_Ejemplo_5;
using CofarLE_Ejemplo_5.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(MyWebView), typeof(MyWebViewRenderer))]
namespace CofarLE_Ejemplo_5.Droid
{
    public class MyWebViewRenderer : WebViewRenderer
    {
        public MyWebViewRenderer(Context context) : base(context)
        {
        }

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

            var element = Element as MyWebView;
            Control.Settings.TextZoom = element.ZoomInLevel;

            base.OnElementPropertyChanged(sender, e);
        }
    }
}

MyWebViewRendereriOS.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CofarLE_Ejemplo_5;
using CofarLE_Ejemplo_5.iOS;
using Foundation;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(MyWebView), typeof(MyWebViewRendereriOS))]
namespace CofarLE_Ejemplo_5.iOS
{
    public class MyWebViewRendereriOS : WebViewRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (NativeView != null && e.NewElement != null)
            {
                var control1 = NativeView as UIWebView;
                if (control1 == null) { return; }
                control1.ScalesPageToFit = true;
            }
        }
    }
}

Thank You!


Viewing all articles
Browse latest Browse all 77050

Trending Articles