zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    remove white space from read
    optimize the access speed of django website
    dowload image from requests
    run jupyter from command
    crawl wechat page
    python version 2.7 required which was not found in the registry windows 7
    health
    alternate rows shading using conditional formatting
    word
    【JAVA基础】static 关键字
  • 原文地址:https://www.cnblogs.com/techidea/p/4693376.html
Copyright © 2011-2022 走看看