Android入门--WebView使用总结

WebView,字面理解就是网页浏览,用于加载显示网页,类似浏览器,使用了WebKit渲染引擎加载显示网页,Android及iOS的webView的引擎都是webkit,对Html5提供支持.

下面整理一些webView的基础概念和使用方法:

  • 添加权限(容易忽略的小失误):AndroidManifest.xml中必须使用许可”android.permission.INTERNET“,否则会出Web page not available错误。
  • webView基本设置:通过getsetting()方法进行设置

    • void setAllowFileAccess(boolean allow):允许或禁止访问文件数据
    • void setBlockNetworkImage(boolean flag):是否显示网络图像
    • void setBuiltInZoonControls(boolean enabled):是否支持缩放
    • void setCacheMode(int mode):设置缓存模式
    • void setDefaultFontSize(int size):设置默认字体大小
    • void setDefaultTextEncodingName(String encoding):设置默认编码
    • void setDisplayZoomControls(boolean enabled):设置是否使用缩放按钮
    • void setJavaScriptEnabled(boolean flag):设置是否支持JavaScript
    • void setSupportZoom(boolean support):设置是否支持缩放
  • 网页事件处理:通过WebViewClient和WebChromeClient处理

    • WebViewClient用来帮助WebViewView处理各种通知,请求事件,常用方法如下:
      • void doUpdateVisitedHistory(WebView view,String url,boolean isReload):更新历史记录
      • void onFormResubmission(WebView view,Message dontResend,Message resend):重新请求网页数据
      • void onPageFinished(WebView view,String url):网页加载完毕
      • void onReceivedError(WebView view,int errorCode,String description,String failingUrl):报告错误信息
      • void onScaleChanged(WebView view,float oldScale,float newScale):WebView发生变化
      • boolean shouldOverrideKeyEvent(WebView view,KeyEvent event):控制新连接在当前WebView中打开
    • WebChromeClient用于辅助WebView处理JavaScript的对话框,网站图标,网站标题,加载进度等。常用方法有:
      • void onCloseWindow(WebView window):关闭WebView
      • boolean onCreateWindow(WebView view,boolean dialog,boolean userGesture,Message resultMsg):创建WebView
      • boolean onJsAlert(WebView view,String url,String message,JsResult result):处理JavaScript中的Alert对话框
      • boolean onJsConfirm(WebView view,String url,String message,JsResult result):处理JavaScript中的Comfirm对话框
      • boolean onJsPrompt(WebView view,String url,String message,String defaultValue,JsPromptResult result):处理JavaScript中的Prompt对话框
      • void onProgressChanged(WebView view,int newProgress):加载进度条状态
      • void onReceivedIcon(WebView view,Bitmap icon):网页图标改变
      • void onReceivedTitle(WebView view,String title):网页标题改变

1.WebView基本使用:

  • 方法一

    • 在要Activity中实例化WebView组件:WebView webView = new WebView(this);

    • 调用WebView的loadUrl()方法,设置WevView要显示的网页:

      • 互联网用:webView.loadUrl(“http://www.baidu.com“);
      • 本地文件用:webView.loadUrl(“file:///android_asset/xx.html”);
      • 本地文件存放在:assets 文件中
    • 调用Activity的setContentView( )方法来显示网页视图

    • 用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面

下面是实例代码:
MainActivity.java 这是一个最简单的webView实例,只用到一个java文件,不需要使用布局view文件就能实现webView控件:

package com.example.webviewtest;

import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.app.Activity;

public class MainActivity extends Activity {
    // 申明webView控件
    private WebView mWebView = null;
    // 创建一个url地址
    private static final String url = "http://www.baidu.com";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 初始化webView实例
        mWebView = new WebView(this);
        // 设置支持JavaScript
        mWebView.getSettings().setJavaScriptEnabled(true);
        // 加载url,即打开网页
        mWebView.loadUrl(url);

        // 设置当前Activity对应的视图为这个webView
        setContentView(mWebView);
    }

    // 物理返回键的点击事件
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // 如果点击的是“返回”并且webView支持返回功能
        if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
            // 就执行返回
            mWebView.goBack();
            return true;
        }
        return false;
    }

}

运行效果如图:
简单的WebView

  • 方法二

    • 在布局文件中声明WebView

    • 调用WebView的loadUrl()方法,设置WevView要显示的网页:

      • 互联网用:webView.loadUrl(“http://www.baidu.com“);
      • 本地文件用:webView.loadUrl(“file:///android_asset/xx.html”);
      • 本地文件存放在:assets 文件中
    • 为了让WebView能够响应超链接功能(即点击链接打开新网页),调用setWebViewClient( )方法,设置 WebView视图

    • 用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面

下面是实例代码:
activity_main.xml 中的就是一个webView控件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

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

</RelativeLayout>

MainActivity.java 中是主要逻辑结构,相比上一个实例,增加了一个调用webViewClient类的方法,主要用于在webView中点击链接打开,返回功能也能使用

package com.example.webviewtest;

import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.app.Activity;

public class MainActivity extends Activity {
    // 申明webView控件
    private WebView mWebView = null;
    // 创建一个url地址
    private static final String url = "http://www.baidu.com";

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

        // 初始化webView实例
        mWebView = (WebView) findViewById(R.id.wv_main);

        // 设置支持JavaScript
        mWebView.getSettings().setJavaScriptEnabled(true);

        // 加载url,即打开网页
        mWebView.loadUrl(url);

        mWebView.setWebViewClient(new WebViewClient() {
            // WebViewClient的作用帮助webView去处理一些页面控制和请求通知
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                view.loadUrl(url);
                // 返回值
                // true:控制网页在webView中打开
                // false:调用系统浏览器或者第三方浏览器中打开
                return true;

            }
        });

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        return false;
    }

}

运行效果:
这里写图片描述 这里写图片描述

以上,实现了最简单的webView功能,能够完成最基本的网页浏览

2.WebView中网页事件处理

  • 使用WebViewClient对象
        // 设置WebViewClient事件,这里设置的是点击链接的加载为在当前WebView中加载
        wv_main.setWebViewClient(new WebViewClient() {

            // 控制新连接在当前WebView中打开
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

当点击了WebView中的一个链接,默认的行为是Android启动一个处理URL的应用,通常,默认的浏览器打开URL。但是可以在WebView中覆盖这一行为,使连接仍在WebView中打开。之后,根据在WebView中维护的网页浏览历史,用户可以向前或向后浏览网页。这里就需要用到WebViewClient对象,此实例就是上一个代码实例,这里就不再赘述

  • 使用WebChromeClient对象
    // 设置WebChromeClient事件,这里设置的是跳转页面时在输入框中显示进度
        wv_main.setWebChromeClient(new WebChromeClient() {

            // 加载进度条改变
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                et_inputUrl.setText("正在加载...");
                if (newProgress == 100) {
                    et_inputUrl.setText("加载完成");
                }
            }
        });

可以看到WebViewClient和WebChromeClient对象的使用方法大致相似,具体想要使用什么方法可根据官方文档查看,下面是实例的代码:

activity_main.xml 布局文件中增加了一个编辑框和按钮,用于跳转到输入的网址,然后下面就是一个WebView控件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <LinearLayout
        android:id="@+id/LL_entry"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/et_input"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="10"
            android:hint="enter the url" />

        <Button
            android:id="@+id/bt_gotoUrl"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="go-->" />
    </LinearLayout>

    <WebView
        android:id="@+id/WV_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/LL_entry" />

</RelativeLayout>

MainActivity.java 这里使用了WebViewClient和WebChromeClient这两个对象,webViewClient对象用于让页面跳转就在当前WebView中;WebChromeClient对象用于显示页面跳转的进度:

package com.example.webchromeclienttest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    private static final String defaultUrl = "http://www.baidu.com";

    private EditText et_inputUrl = null;
    private Button bt_gotoUrl = null;
    private WebView wv_main = null;

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

        // 初始化组件
        initViews();

        // 设置支持JavaScript
        wv_main.getSettings().setJavaScriptEnabled(true);
        // 设置支持缩放
        wv_main.getSettings().setSupportZoom(true);
        // 设置出现缩放工具
        wv_main.getSettings().setBuiltInZoomControls(true);

        // 加载默认url
        wv_main.loadUrl(defaultUrl);

        // 设置WebViewClient事件,这里设置的是点击链接的加载为在当前WebView中加载
        wv_main.setWebViewClient(new WebViewClient() {

            // 控制新连接在当前WebView中打开
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

        // 设置WebChromeClient事件,这里设置的是跳转页面时在输入框中显示进度
        wv_main.setWebChromeClient(new WebChromeClient() {

            // 加载进度条改变
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                et_inputUrl.setText("正在加载...");
                if (newProgress == 100) {
                    et_inputUrl.setText("加载完成");
                }
            }
        });

        // 按钮的点击事件,也就是点击按钮就会转到输入的url的页面
        bt_gotoUrl.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String newUrl = "http://" + et_inputUrl.getText().toString();
                wv_main.loadUrl(newUrl);
            }
        });
    }

    // 初始化组件的方法
    private void initViews() {
        et_inputUrl = (EditText) findViewById(R.id.et_input);
        bt_gotoUrl = (Button) findViewById(R.id.bt_gotoUrl);
        wv_main = (WebView) findViewById(R.id.WV_main);
    }
}

下面是运行效果:
这里写图片描述 这里写图片描述

这里写图片描述 这里写图片描述

以上,WebView的使用就总结到这里

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值