Xamarin.Android Web 视图

WebView 支持创建你自己的窗口来查看网页(甚至开发完整的浏览器)。 在本教程中,你将创建一个可以查看和浏览网页的简单 Activity

创建名为 HelloWebView 的新项目

打开 Resources/Layout/Main.axml 并插入以下内容:

<?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" />

由于此应用程序将访问 Internet,因此必须在 Android 清单文件中添加适当的权限。 打开项目属性,指定应用程序运行所需的权限。 启用 INTERNET 权限,如下所示:

Setting the INTERNET permission in the Android Manifest

现在打开 MainActivity.cs 并为 Webkit 添加一个 using 指令

using Android.Webkit;

MainActivity 类的顶部,声明一个 WebView 对象:

WebView web_view;

当要求 WebView 加载 URL 时,默认情况下会将请求委托给默认浏览器。 要让 WebView 加载 URL(而不是默认浏览器),必须子类化 Android.Webkit.WebViewClient 并替代 ShouldOverriderUrlLoading 方法。 此自定义 WebViewClient 的实例提供给 WebView。 为此,请在 MainActivity 内添加以下嵌套 HelloWebViewClient 类:

public class HelloWebViewClient : WebViewClient
{
    public override bool ShouldOverrideUrlLoading (WebView view, string url)
    {
        view.LoadUrl(url);
        return false;
    }
}

ShouldOverrideUrlLoading 返回 false 时,它向 Android 发出信号,表示当前的 WebView 实例已处理了该请求,无需进一步操作。

如果要面向 API 级别 24 或更高级别,请使用 ShouldOverrideUrlLoading 的重载,其第二个参数应为 IWebResourceRequest,而不是 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;
    }
}

接下来,为 OnCreate()) 方法使用以下代码:

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");
}

这将使用 Activity 布局中的项初始化成员 WebView,使用 JavaScriptEnabled= trueWebView 启用 JavaScript(请参阅从 JavaScript 调用 C#方案,了解如何从 JavaScript 调用 C# 函数)。 最后,用 LoadUrl(String) 加载初始网页。

生成并运行应用。 应会看到一个简单的网页查看器应用,如以下屏幕截图所示:

Example of app displaying a WebView

要处理“BACK”按钮按键,添加以下 using 语句

using Android.Views;

接下来,在 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);
}

这 每当在活动运行时按下按钮,会调用 OnKeyDown(int, KeyEvent) 回叫方法。 内部条件使用 KeyEvent 来检查按下的键是否为“BACK”按钮,以及 WebView 是否真的能够返回(如果有历史记录)。 如果两者都为 true,则调用 GoBack() 方法,该方法将在 WebView 历史记录中返回一步。 返回 true 表示事件已处理。 如果未满足此条件,则将事件发送回系统。

再次运行应用程序。 现在,应该可以跟踪链接并回溯页面历史记录:

Example screenshots of the Back button in action

本页的部分内容是根据 Android 开源项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 Attribution License 中的条款进行使用。