码迷,mamicode.com
首页 > 移动开发 > 详细

Forms Android WebView Renderer

时间:2015-07-31 23:13:50      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
  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

 

Forms Android WebView Renderer

标签:

原文地址:http://www.cnblogs.com/techidea/p/4693376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!