前言:

如果你想要传送一个web应用作为客户端应用的一部分,那么,你可以使用webView来达到这一点;

webView允许你去显示一个web页面作为Activity布局的一部分;它并没有具备一个浏览器所有的特征;

比如导航的控制或者地址栏;默认地,webView所做的就是显示一个web页面;


添加一个WebView到应用中

添加WebView到应用中,仅仅只需在Activity的布局中添加<WebView>元素即可;例如,下面这个例子

是关于WebView全屏的例子;

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


在WebView中加载一个页面是通过 loadUrl()来实现的

例如:

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://www.example.com");

在此之前,你的应用必须要有可访问网络的权限;在你的AndroidManifest.xml中添加如下所示:

<manifest ... >
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

以上就是WebView用来显示一个页面所需要做的工作;


在WebView中使用JavaScript

如果你加载的这个页面使用了JavaScript,那么你必须使能JavaScript;一旦JavaScript使能了,那么你就可以在你的应用和JavaScript

之间去创建接口;

使能JavaScript

默认情况下,JavaScript是没有使能的;你可以通过你的WebView的 WebSettings的setJavaScriptEnabled()方法去使能JavaScript;

而 WebSettings可用getSettings()方法来获取到;例如:

WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);


处理页面导航

当用户在你的webView中点击一个页面时,在Android中,其默认的行为是去开启一个应用去处理这个URL;通常,这个默认的浏览器

会被打开,然后去加载这个URL;当然,在你的WebView中,你可以重写这个行为,然后让其在你的WebView中去打开这个URL;


去打开用户点击的链接,仅仅只需要通过setWebViewClient()去提供一个WebViewClient,例如:

setWebViewClient

那么,用户所有点击的链接都会在你的WebView里边去进行打开了;


如果你想在一个链接进行加载的同时,有其他一些控制的话,那么你需要新建一个你自己的WebViewClient类,

然后重写shouldOverrideUrlLoading();例如:

shouldOverrideUrlLoading

然后创建这个WebViewClient类的实体:

setWebViewClient

现在当用户点击一个链接的时候,系统就会调用shouldOverrideUrlLoading()方法;在这个方法里边会去检查这个URL主机的域名是否与我们

在上述示例中所给出的域名匹配;若匹配,那么这个方法就会返回false,让WebView去加载这个URL;若不匹配,那么Intent会被创建,然后用来

去开启一个Activity来加载这个URL(这将会通过用户默认的浏览器来进行处理);


导航Web历史页面

当webView重写了URL Loading,那么,WebView自然会记录一些访问过的页面,你可以通过goBack() 和 goForward()方法来实现历史页面的

向前或者向后的访问;

例如:这是关于一个Activity的后退按钮如何实现后退的例子

onKeyDown
canGoBack
goBack

如果这确实存在一个用户访问过的页面,那么,canGoBack()方法就会返回true;同样,你可以使用canGoForward()方法去检查是否存在一个

向前访问过的历史页面;如果你没有做这一步检查,与此同时,用户到达了历史页面的末端,那么goBack() 或者 goForward()将什么都不做;


代码示例如下:

MainActivity:

package com.example.administrator.MyWebView;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /***
         * 获取WebView控件
         * **/
        webView = (WebView) findViewById(R.id.wv);
        /***
         * 对于有JavaScript的部分,也能够予以显示
         * **/
        webView.getSettings().setJavaScriptEnabled(true);

        /***
         * 这是为了实现用户所点击的页面在WebView里边进行显示
         * **/
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });

        webView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                // Activities and WebViews measure progress with different scales.
                // The progress meter will automatically disappear when we reach 100%

            }
        });
        /***
         * 加载我们要访问的页面
         * **/
        webView.loadUrl("https://www.baidu.com/");

    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        /***
         * 这是对访问过的历史页面的处理
         * **/
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
            webView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}



activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/wv"
        />
</LinearLayout>




运行结果:

Android View 示例 android webview使用_加载

总结:

WebView的作用就是可以实现在应用中实现内嵌网页进行浏览的效果


源码:

WebView示例源码