• Forms Android WebView Renderer


      1 forms 代码
      2 
      3 using System;
      4 using Xamarin.Forms;
      5 
      6 namespace.Core
      7 {
      8     public class ContentWebView:WebView
      9     {
     10         //private ProgressBar progressbar;
     11 
     12         public ContentWebView ()
     13         {
     14             
     15         }
     16 
     17         public string Url{ get; set;}
     18 
     19         public string LocalFile{ get; set;}
     20 
     21         public string HtmlStr{ get; set;}
     22 
     23         public string Token{ get; set;}
     24 
     25 
     26 
     27 
     28         bool android_EnableLongPress=true;
     29         public bool  EnableLongPress {
     30             get {
     31                 return android_EnableLongPress;
     32             }
     33             set {
     34                 android_EnableLongPress = value;
     35             }
     36         }
     37 
     38 
     39         bool useLoading=false;
     40         public bool UseLoading {
     41             get {
     42                 return useLoading;
     43             }
     44             set {
     45                 useLoading = value;
     46             }
     47         }
     48 
     49         bool isFinished=false;
     50         public bool IsFinished {
     51             get {
     52                 return isFinished;
     53             }
     54             set {
     55                 isFinished = value;
     56             }
     57         }
     58 
     59         public delegate void LoadFinishedHandler( object sender, EventArgs e );
     60         public event LoadFinishedHandler LoadFinished;
     61 
     62         public void RiseloadedEvent()
     63         {
     64             IsFinished = true;
     65             if (LoadFinished!=null) {
     66                 LoadFinished (this, null);
     67             }
     68 
     69         }
     70         bool fakeWeChat=false;
     71         public bool FakeWeChat {
     72             get {
     73                 return fakeWeChat;
     74             }
     75             set {
     76                 fakeWeChat = value;
     77             }
     78         }
     79 
     80         bool scalesPageToFit;
     81         public bool ScalesPageToFit {
     82             get {
     83                 return scalesPageToFit;
     84             }
     85             set {
     86                 scalesPageToFit = value;
     87             }
     88         }
     89 
     90 
     91     }
     92 }
     93 
     94 284300.png
     95 
     96 using System;
     97 using Xamarin.Forms;
     98 using.Core;
     99 using Xamarin.Forms.Platform.Android;
    100 using System.Collections.Generic;
    101 using Android.Webkit;
    102 using Android.Content;
    103 
    104 
    105 [assembly: ExportRenderer(typeof(ContentWebView), typeof(ContentWebViewRender))]
    106 namespace.Core
    107 {
    108     public class ContentWebViewRender:WebViewRenderer
    109     {
    110         public ContentWebViewRender ()
    111         {
    112             
    113         }
    114  
    115         public class CustomWebViewClient : WebViewClient
    116         {
    117             ContentWebView t;
    118 
    119             public CustomWebViewClient (ContentWebView self)
    120             {
    121                 t = self;
    122             }
    123 
    124             public override void OnPageFinished (Android.Webkit.WebView view, string url)
    125             {
    126                 if (t!=null) {
    127                     t.RiseloadedEvent ();
    128                 }
    129                 base.OnPageFinished (view, url);
    130 
    131             }
    132         }
    133 
    134         public  override bool OnKeyLongPress(Android.Views.Keycode keyCode, Android.Views.KeyEvent e)
    135         {
    136             //base.SetOnLongClickListener
    137             return true;
    138             //base.OnKeyLongPress(keyCode,e);
    139         }
    140 
    141         protected override void OnElementChanged (ElementChangedEventArgs<Xamarin.Forms.WebView> e)
    142         {
    143             base.OnElementChanged (e);
    144          
    145             if (e.OldElement == null) {   // perform initial setup
    146                 var t=e.NewElement as ContentWebView ;
    147                 //this.Control.SetOnLongClickListener (new LongClickEventArgs);
    148                 /*
    149                 if (!t.Android_EnableLongPress) {
    150 
    151 //                    this.Control.LongClickable = false;
    152 //                    this.LongClick += (o1, e1) => {
    153 //                        
    154 //                    };
    155 
    156                     this.SetOnLongClickListener (new longpress ());
    157                 }
    158                 */
    159                 if (t.FakeWeChat) {
    160                     this.Control.Settings.UserAgentString = "Mozilla/5.0 AppleWebKit/600.1.4 (KHTML, like Gecko) MicroMessenger/5.4.1 Fake";
    161                     //this.Control.Settings.DefaultTextEncodingName = "gb2312";
    162 
    163                 }
    164                 this.Control.Settings.DefaultTextEncodingName = "gb2312";
    165                 this.Control.SetWebViewClient (new CustomWebViewClient (t));
    166                 this.Control.SetWebChromeClient (new CustomChromeClient(t));
    167                 this.Control.Settings.JavaScriptEnabled = true;
    168 
    169                 if (string.IsNullOrEmpty (t.Token)) {
    170                     if (!string.IsNullOrEmpty (t.Url)) {
    171                         this.Control.LoadUrl (t.Url);
    172                     } else if (!string.IsNullOrEmpty (t.HtmlStr)) {
    173                         this.Control.LoadData (t.HtmlStr, "text/html", "UTF-8");
    174 
    175                     } else if (!string.IsNullOrEmpty (t.LocalFile)) {
    176                         this.Control.LoadUrl ("file:///android_asset/" + t.LocalFile);
    177                     } else {
    178                     }
    179 
    180                 } else {
    181                     Dictionary<string, string> headers = new Dictionary<string, string> ();
    182                     headers.Add ("Authorization", t.Token);
    183                     try {
    184                         this.Control.LoadUrl (t.Url, headers);
    185                     } catch (Exception ex) {
    186                         Console.WriteLine (ex.ToString ());
    187                     }
    188 
    189                 }
    190                 Control.LongClick += Control_LongClick;
    191             }
    192         }
    193 
    194         void Control_LongClick (object sender, LongClickEventArgs e)
    195         {
    196             //do nothing
    197         }
    198 
    199 
    200         protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
    201         {
    202             if (Control != null)
    203             {
    204                 Control.Settings.BuiltInZoomControls = true;
    205                 Control.Settings.DisplayZoomControls = true;
    206             }
    207             base.OnElementPropertyChanged(sender, e);
    208 
    209         }
    210     }
    211 }
    212 
    213 
    214 using System;
    215 using System.Diagnostics;
    216 using System.Text;
    217 using System.Text.RegularExpressions;
    218 
    219 using Xamarin.Forms;
    220 using.Core;
    221 using Xamarin.Forms.Platform.Android;
    222 using System.Collections.Generic;
    223 
    224 using Android.Webkit;
    225 using Android.App;
    226 using Android.Content;
    227 
    228 namespace.Core
    229 {
    230     public class CustomChromeClient : WebChromeClient
    231     {
    232         ContentWebView t;
    233         public CustomChromeClient (ContentWebView self)
    234         {
    235             this.t = self;
    236         }
    237 
    238         public override bool OnJsAlert (Android.Webkit.WebView view, string url, string message, JsResult result)
    239         {
    240              AlertDialog.Builder builder = new AlertDialog.Builder (view.Context);
    241             builder.SetTitle ("提示");
    242             builder.SetMessage (message);
    243             //builder.SetPositiveButton ("确定",new CustomDialogInterfaceOnClickOKListener(result));
    244             builder.SetPositiveButton("确定",delegate {
    245                 result.Confirm();
    246             });
    247             //builder.SetOnKeyListener (new CustomDialogInterfaceOnKeyListener());
    248             builder.SetCancelable (false);
    249             AlertDialog dialog = builder.Create ();
    250             dialog.Show ();
    251             result.Confirm ();
    252             return true;
    253             //return base.OnJsAlert(view, url, message, result);  
    254         }
    255 
    256         public override bool OnJsConfirm (Android.Webkit.WebView view, string url, string message, JsResult result)
    257         {
    258             AlertDialog.Builder builder = new AlertDialog.Builder (view.Context);
    259             builder.SetTitle ("提示")
    260                 .SetMessage (message)
    261                 .SetPositiveButton ("确定", delegate {
    262                     result.Confirm();
    263                 })
    264                 .SetNeutralButton("取消",delegate {
    265                     result.Cancel();
    266                 });
    267 
    268             builder.SetOnCancelListener(new CustomDialogInterfaceOnCancelListener(result));
    269             builder.SetOnKeyListener(new CustomDialogInterfaceOnKeyListener());
    270             AlertDialog dialog = builder.Create();
    271             dialog.Show();
    272             return true;
    273             //return base.OnJsConfirm (view, url, message, result);
    274         }
    275     }
    276 }
    277 
    278 using System;
    279 using System.Diagnostics;
    280 
    281 using Xamarin.Forms;
    282 using.Core;
    283 using Xamarin.Forms.Platform.Android;
    284 using System.Collections.Generic;
    285 using Android.Webkit;
    286 
    287 namespace.Core
    288 {
    289     public class CustomClient : WebViewClient
    290     {
    291         ContentWebView t;
    292 
    293         public CustomClient (ContentWebView self)
    294         {
    295             t = self;
    296         }
    297 
    298         public override void OnPageFinished (Android.Webkit.WebView view, string url)
    299         {
    300             if (t!=null) {
    301                 t.RiseloadedEvent ();
    302             }
    303             base.OnPageFinished (view, url);
    304 
    305         }
    306     }
    307 }
    308 
    309 using System;
    310 using Xamarin.Forms;
    311 
    312 using Android.Content;
    313 using Android.Widget;
    314 using Android.App;
    315 using Android.Views;
    316 
    317 namespace.Core
    318 {
    319     public class CustomDialogInterfaceOnCancelListener: Java.Lang.Object,IDialogInterfaceOnCancelListener
    320     {
    321         Android.Webkit.JsResult result;
    322 
    323         public CustomDialogInterfaceOnCancelListener (Android.Webkit.JsResult self)
    324         {
    325             result = self;
    326         }
    327 
    328         public void OnCancel (IDialogInterface dialog)
    329         {
    330             result.Cancel ();
    331         }
    332     }
    333 }
    334 
    335 using System;
    336 using Xamarin.Forms;
    337 
    338 using Android.Content;
    339 using Android.Widget;
    340 using Android.App;
    341 using Android.Views;
    342 
    343 namespace.Core
    344 {
    345     public class CustomDialogInterfaceOnKeyListener:Java.Lang.Object,IDialogInterfaceOnKeyListener
    346     {
    347         public CustomDialogInterfaceOnKeyListener ()
    348         {
    349         }
    350 
    351         public bool OnKey (IDialogInterface dialog, Keycode keyCode, KeyEvent e){
    352             return true;
    353         }
    354     }
    355 }
    View Code
  • 相关阅读:
    分布式服务框架的雪崩问题
    分布式系统中的幂等性
    Exception引起的性能问题
    TFS2017新特性(一)
    云平台架构变迁
    MQ基本概念
    SVN版本管理
    1年内4次架构调整,谈Nice的服务端架构变迁之路
    鏖战双十一-阿里直播平台面临的技术挑战
    统一日志平台初探
  • 原文地址:https://www.cnblogs.com/techidea/p/4693376.html
Copyright © 2020-2023  润新知