Visualizzazione Web Xamarin.Android
WebView
consente di creare una finestra personalizzata per la visualizzazione di pagine Web (o anche sviluppare un browser completo). In questa esercitazione si creerà un semplice Activity
in grado di visualizzare e esplorare le pagine Web.
Creare un nuovo progetto denominato HelloWebView.
Aprire Resources/Layout/Main.axml e inserire quanto segue:
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Poiché questa applicazione accederà a Internet, è necessario aggiungere le autorizzazioni appropriate al file manifesto Android. Aprire le proprietà del progetto per specificare le autorizzazioni necessarie per il funzionamento dell'applicazione. Abilitare l'autorizzazione INTERNET
come illustrato di seguito:
Aprire ora MainActivity.cs e aggiungere una direttiva using per Webkit:
using Android.Webkit;
Nella parte superiore della MainActivity
classe dichiarare un WebView
oggetto :
WebView web_view;
Quando viene richiesto a WebView di caricare un URL, per impostazione predefinita delega la richiesta al browser predefinito. Per fare in modo che WebView carichi l'URL (anziché il browser predefinito), è necessario sottoclasse Android.Webkit.WebViewClient
ed eseguire l'override del ShouldOverriderUrlLoading
metodo. Un'istanza di questa personalizzata WebViewClient
viene fornita all'oggetto WebView
. A tale scopo, aggiungere la classe annidata HelloWebViewClient
seguente all'interno MainActivity
di :
public class HelloWebViewClient : WebViewClient
{
public override bool ShouldOverrideUrlLoading (WebView view, string url)
{
view.LoadUrl(url);
return false;
}
}
Quando ShouldOverrideUrlLoading
restituisce false
, segnala ad Android che l'istanza corrente WebView
ha gestito la richiesta e che non è necessaria alcuna azione aggiuntiva.
Se si ha come destinazione il livello API 24 o versione successiva, usare l'overload di ShouldOverrideUrlLoading
che accetta un IWebResourceRequest
per il secondo argomento invece di :string
public class HelloWebViewClient : WebViewClient
{
// For API level 24 and later
public override bool ShouldOverrideUrlLoading (WebView view, IWebResourceRequest request)
{
view.LoadUrl(request.Url.ToString());
return false;
}
}
Successivamente, usare il codice seguente per il OnCreate()
metodo ) :
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
web_view = FindViewById<WebView> (Resource.Id.webview);
web_view.Settings.JavaScriptEnabled = true;
web_view.SetWebViewClient(new HelloWebViewClient());
web_view.LoadUrl ("https://www.xamarin.com/university");
}
Questo inizializza il membro WebView
con quello dal Activity
layout e abilita JavaScript per WebView
con JavaScriptEnabled
= true
(vedere la ricetta Call C# from JavaScript per informazioni su come chiamare le funzioni C# da JavaScript ). Infine, viene caricata una pagina Web iniziale con LoadUrl(String)
.
Compilare ed eseguire l'app. Verrà visualizzata una semplice app visualizzatore di pagine Web come quella visualizzata nello screenshot seguente:
Per gestire il tasto INDIETRO , aggiungere l'istruzione using seguente:
using Android.Views;
Aggiungere quindi il metodo seguente all'interno dell'attività HelloWebView
:
public override bool OnKeyDown (Android.Views.Keycode keyCode, Android.Views.KeyEvent e)
{
if (keyCode == Keycode.Back && web_view.CanGoBack ())
{
web_view.GoBack ();
return true;
}
return base.OnKeyDown (keyCode, e);
}
Ciò OnKeyDown(int, KeyEvent)
Il metodo di callback verrà chiamato ogni volta che viene premuto un pulsante durante l'esecuzione dell'attività. La condizione all'interno usa per KeyEvent
verificare se il tasto premuto è il pulsante INDIETRO e se è WebView
effettivamente in grado di spostarsi indietro (se ha una cronologia). Se entrambi sono true, viene chiamato il GoBack()
metodo , che consente di tornare indietro di un passaggio nella WebView
cronologia. La restituzione true
indica che l'evento è stato gestito. Se questa condizione non viene soddisfatta, l'evento viene restituito al sistema.
Eseguire di nuovo l'applicazione. A questo ora dovrebbe essere possibile seguire i collegamenti e tornare indietro nella cronologia della pagina:
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nellalicenza Creative Commons 2.5 Attribuzione.
Collegamenti correlati
- Call C# from JavaScript (Chiamare C# da JavaScript)
- Android.Webkit.WebView
- KeyEvent