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:

Setting the INTERNET permission in the Android Manifest

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 MainActivitydi :

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:

Example of app displaying a WebView

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:

Example screenshots of the Back button in action

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.