构建WebView就可以显示Web信息。
因为我觉得这里会讲述很多方式来实现WebView,所以我决定为每一种方式创建一个对应的Activity,MainActivity通过Button可以点击进入对应的Activity。

通过Intent调用系统浏览器
只需要用到3行代码:
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
注:url为我需要访问的网页;activity1.xml需要在Manifest.xml中进行注册。

package com.example.webview;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; public class Activity1 extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity1); String url = "http://www.cnblogs.com/moonlightpoet";
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
}

Activity1.java

课程目标
通过WebView自制一个简易网页浏览器

课程内容
(1)将WebView加入到你的应用
(2)使用WebView加载页面
(3)获取网络访问权限
  注意:当我们通过意图(Intent)去调用一个系统浏览器或者一个第三方的浏览器的时候,我们是不需要具有Web访问的权限的,而如果我们需要自己来访问Web页面,则需要申请开通网络访问的权限。
(4)在WebView中使用JavaScript
(5)处理页面导航
(6)后退与前进
(7)判断页面加载过程
(8)WebView缓存的运用

使用WebView加载页面
要在WebView加载页面,使用loadUrl()
loadUrl()方法可以加载两种类型的资源:Web资源 和 本地文件
web资源:webView.loadUrl("http://www.example.com")
本地文件:webView.loadUrl("file:///android_asset/XX.html")
本地文件存放在:assets目录中
//使页面获得焦点
webView.requestFocus();

获取网络访问权限
在它有效工作之前,你要保证你的应用能访问网络。要访问网络,需要在你的配置文件中获取INTERNET权限。
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>

WebUrl加载本地文件:
String url = "file:///android_asset/example.html";
webView.loadUrl(url);
将url换成网址就可以加载在线的网页了。
Activity2.java中注释掉的url是本地assets/目录下的example.html对应的uri,但我们实际会演示加载一个在线网页。
String url = "http://www.cnblogs.com/moonlightpoet";
webView.loadUrl(url);
这里我们会发现,网站中的内容嵌套在了WebView容器中。

package com.example.webview;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView; public class Activity2 extends Activity { private WebView webView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity2); webView = (WebView) findViewById(R.id.webView1);
// String url = "file:///android_asset/example.html";
String url = "http://www.cnblogs.com/moonlightpoet";
webView.loadUrl(url);
}
}

Activity2.java

处理页面导航
当用户点击一个WebView中的页面的链接时,通常,是由默认的浏览器打开并加载目标URL的。然而,你可以在WebView中覆盖着以行为,那么就会在WebView中打开。
webView.setWebViewClient(new WebViewClient());
覆盖WebView默认通过第三方或者是系统浏览器打开网页的行为,使得网页可以在WebView中直接打开。
(注:我在Activity2.java中好像是网页内容就直接显示在TextView中了)
设定shouleOverrideUrlLoading()方法:
 返回值是true的时候是控制网页在WebView中去打开,如果为false则调用系统或第三方浏览器去打开。

        webView.loadUrl(url);
webView.setWebViewClient(new WebViewClient() { @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return true;
} });

WebViewClient可以帮助WebView去处理一些页面控制和请求通知

(补充:

        WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//设置js可以直接打开窗口,如window.open(),默认为false
webSettings.setJavaScriptEnabled(true);//是否允许执行js,默认为false。设置true时,会提醒可能造成XSS漏洞
webSettings.setSupportZoom(true);//是否可以缩放,默认true
webSettings.setBuiltInZoomControls(true);//是否显示缩放按钮,默认false
webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放。大视图模式
webSettings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
webSettings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
webSettings.setDomStorageEnabled(true);//DOM Storage
webSettings.setUserAgentString("User-Agent:Android");//设置用户代理,一般不用

在WebView中使用Javascript
如果你想要你家在在WebView中的web页面使用JavaScript,你需要在WebView中启用JavaScript。启用JavaScript你可以通过WebView中带有的WebSettings来启用它。你可以通过getSettings()来获取WebSettings的值,然后通过setJavaScriptEnabled()来启用JavaScript。
WebView webView = (WebView) findViweById(R.id.webview);
WebSettings webSettings = webView.getSettings();
sebSettings.setJavaScriptEnabled(true);

浏览网页的时候还有一个问题就是:当我点击返回按钮的时候整个activity都退出了,而我要的效果实际上是一个网页的前进和后退的效果,我想要的效果是当我点击返回的时候是我从当前页面返回到我之前访问的那一个页面。
后退与前进
当你的WebView覆盖了URL加载,它会自动生成历史访问记录。你可以通过goBack()或goForward()向前或向后访问已访问过的站点。
我们需要修改物理按键返回的逻辑

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

判断页面加载过程
由于有些网页肯呢过加载缓慢,所以我们需要去判断页面的加载过程,制作进度条给与用户良好的体验效果。
WebView通过设置一个WebChromeClient并且通过WebChromeClient的onProgressCHanged()方法得到当前加载的进度。

        webView.setWebChromeClient(new WebChromeClient() {

            private ProgressDialog progressDialog;
@Override
public void onProgressChanged(WebView view, int newProgress) {
// newProgress 1 ~ 100 之间的证书
if (newProgress == 100) {
// 加载完成,关闭ProgressDialog
closeDialog();
} else {
// 还在加载,打开ProgressDialog
openDialog(newProgress);
}
super.onProgressChanged(view, newProgress);
}
private void closeDialog() {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
}
private void openDialog(int newProgress) {
if (progressDialog == null) {
progressDialog = new ProgressDialog(Activity3.this);
progressDialog.setProgress(newProgress);
progressDialog.setTitle("正在加载");
progressDialog.show();
} else {
progressDialog.setProgress(newProgress);
}
} });

使用缓存可以优化页面的加载速度
WebView缓存的运用
优先使用缓存:
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
不适用缓存:
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

package com.example.webview;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient; public class Activity3 extends Activity { private WebView webView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity3); webView = (WebView) findViewById(R.id.webView1);
webView.requestFocus();
String url = "http://www.cnblogs.com/moonlightpoet";
webView.loadUrl(url);
webView.setWebViewClient(new WebViewClient() { @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
return true;
} });
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//设置js可以直接打开窗口,如window.open(),默认为false
webSettings.setJavaScriptEnabled(true);//是否允许执行js,默认为false。设置true时,会提醒可能造成XSS漏洞
webSettings.setSupportZoom(true);//是否可以缩放,默认true
webSettings.setBuiltInZoomControls(true);//是否显示缩放按钮,默认false
webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放。大视图模式
webSettings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
webSettings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
webSettings.setDomStorageEnabled(true);//DOM Storage
webSettings.setUserAgentString("User-Agent:Android");//设置用户代理,一般不用 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); webView.setWebChromeClient(new WebChromeClient() { private ProgressDialog progressDialog;
@Override
public void onProgressChanged(WebView view, int newProgress) {
// newProgress 1 ~ 100 之间的证书
if (newProgress == 100) {
// 加载完成,关闭ProgressDialog
closeDialog();
} else {
// 还在加载,打开ProgressDialog
openDialog(newProgress);
}
super.onProgressChanged(view, newProgress);
}
private void closeDialog() {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
}
private void openDialog(int newProgress) {
if (progressDialog == null) {
progressDialog = new ProgressDialog(Activity3.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setProgress(newProgress);
progressDialog.setTitle("正在加载");
progressDialog.show();
} else {
progressDialog.setProgress(newProgress);
}
} });
} @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}

Activity3.java

效果:

Android 使用WebView显示网页的更多相关文章

  1. Android 之 用WebView显示网页

    WebView可以使得网页轻松的内嵌到 app 里,还可以直接跟js相互调用. WebView有两个方法:setWebChromeClient 和 setWebClient (1) setWebCli ...

  2. Android中webView和网页的交互

     Android中webView和网页的交互 Android中webView跟网页的交互式通过JavaScript进行的.具体步骤: 1.创建JavaScript,在点击的时候调用JavaScript ...

  3. HTML5学习总结-10 Android 控件WebView显示网页

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient 1)setWebClient: ...

  4. Android:控件WebView显示网页

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...

  5. Android:控件WebView显示网页 -摘自网络

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...

  6. 使用WebView显示网页

    简单的页面跳转 package com.example.webtest; import java.security.PublicKey; import android.support.v7.app.A ...

  7. Android使用WebView打包网页成app

    原生app的开发成本和网页相比相对较高,所以越来越多的app使用网页来作为界面,甚至完全将一个网站封装成app,可以提高开发速度,还能基本实现跨平台. 下面以Android为例,在ubuntu-14. ...

  8. 实现android里面WebView显示内容

    在日常学习.我们会看到,当手机应该检查注册协议.单击协议时,以查看内部协议的全部内容! 以下给大家看看实现的过程: 首先贴show_xy.XML代码: <WebView android:layo ...

  9. WebView 显示网页

    1.布局 <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:androi ...

随机推荐

  1. python基础系列教程——Python3.x标准模块库目录

    python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata ...

  2. 实践中更高效、实现起来相对简单的基于末尾坏字符原则的BM算法实现

    之前网上看的若干算法,无非两个原则:坏字符原则.好后缀原则.按照算法所述实现了一个版本,但发现其效率还不如本文所述的实现方式.个人分析效率较低的原因可能是因为不断地向前找坏字符或者好后缀来确定跳跃距离 ...

  3. si4438 cca 侦听

    /* set GPIO0 for RSSI interrupt / CCA */txbuf[0] = CMD_GPIO_PIN_CFG;txbuf[1] = 27; /* GPIO[0] = 27: ...

  4. LNMP环境下SendMail+OpenWebMail的详细配置

    随着网络的发展和普及,邮件服务器正在成为人们日常生活中不可缺少的部分.现在,许多企业采用 Lotus Note, Exchange 作为公司内部的邮件服务器.本文主要介绍一种基于Linux系统的邮件服 ...

  5. 利用jQuery进行三行两列等高布局

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Message Code 【27796】 Failed to connect to server 'hostname';port_ld': 'reason'.

    Message Code [27796] Failed to connect to server 'hostname';port_ld': 'reason'.Unable to connect to  ...

  7. RL Problems

    1.Delayed, sparse reward(feedback), Long-term planning Hierarchical Deep Reinforcement Learning, Sub ...

  8. 【转】MFC CListCtrl 使用技巧

    以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...

  9. ioctl参数cmd=2错误

    在写内核驱动的时候,用到了ioctl.自己定义cmd作为ioctl的参数.如下: enum CMD { LEVEL_DOWN, LEVEL_UP, GPIO_INPUT, GPIO_OUTPUT, G ...

  10. 关于Java方法的参数

    刚好看到C++的函数这块,说C++中除了引用类型的形参,其他都是实参的副本(个人总结). 隐约记得Java中方法的参数也是这么回事,于是手动测试一番. 结果 Java中方法的参数都是值传递,哪怕是引用 ...