构建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. mac上php+nginx配置

    brew的安装: ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)”php安装和配置bre ...

  2. 聊聊Python中的多进程和多线程

    今天,想谈一下Python中的进程和线程. 最近在学习Django的时候,涉及到了多进程和多线程的知识点,所以想着一下把Python中的这块知识进行总结,所以系统地学习了一遍,将知识梳理如下. 1. ...

  3. pip国内源

    pip install -i https://pypi.douban.com/simple pyqrcode

  4. kill -HUP pid 更改配置后不重新启动服务,动态更新配置文件

    kill -HUP pid kill -HUP pid  pid 是进程标识.如果想要更改配置而不需停止并重新启动服务,请使用该命令.在对配置文件作必要的更改后,发出该命令以动态更新服务配置. 根据约 ...

  5. thymeleaf+bootstrap,onclick传参实现模态框中遇到的错误

    一个困扰了N久的问题... 网上大多帖子是这么写的 onclick调javascript函数时,不能直接使用onclick=“editUser(${prod.id})”,这样会报错,需要修改成如下的格 ...

  6. Git服务器搭建全过程分步详解

    GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器. 下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用V ...

  7. eclipse的Maven项目pom.xml错误信息提示missingxxxjar解决方案

    今天在学习的时候需要用到maven工程,当时找完所依赖的包的三要素就开始下载了,写完pom.xml需要一段时间下载这些jar包,就躺在一边等了.可能是笔记本有节能功能这个原因导致我醒来时断网发现满屏m ...

  8. selenium测试(Java)--上传文件(十五)

    1. 当页面中是通过input标签实现上传功能时,可以使用selenium来上传功能. 如下: package com.test.upload; import java.io.File; import ...

  9. Nodejs入门手记 (01):Hello World的WEB程序

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Allong,谢谢! “滚滚长江东逝水,浪花淘尽英雄.是非成败转头空.” - <临江仙·杨慎·明> 很熟悉的旋律,鸡汤了一下:高考是 ...

  10. Nginx的启动与停止,重启

    1.先确定nginx所在的文件位置 如: 重启 1.验证nginx配置文件是否正确 方法一:进入nginx安装目录sbin下,输入命令./nginx -t 2.重启Nginx服务 方法一:进入ngin ...