WebView学习指南

来源:互联网 发布:华硕主板bios网络唤醒 编辑:程序博客网 时间:2024/04/28 04:26

对话框测试 上一页

 

2、MainWebView3.java的内容,请注意注释内容:

package android.basic.lesson29;import java.io.FileOutputStream;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Picture;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.webkit.JsPromptResult;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;import android.widget.Toast;public class MainWebView3 extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// 定义UI组件Button b1 = (Button) findViewById(R.id.Button01);Button b2 = (Button) findViewById(R.id.Button02);Button b3 = (Button) findViewById(R.id.Button03);final WebView wv = (WebView) findViewById(R.id.WebView01);// 覆盖默认后退按钮的作用,替换成WebView里的查看历史页面wv.setOnKeyListener(new View.OnKeyListener() {@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {if (event.getAction() == KeyEvent.ACTION_DOWN) {if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {wv.goBack();return true;}}return false;}});// 设置支持Javascriptwv.getSettings().setJavaScriptEnabled(true);// 定义并绑定按钮单击监听器b1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 加载URL assets目录下的内容可以用 "file:///android_asset" 前缀wv.loadUrl("file:///android_asset/html/test1.html");}});// 定义并绑定按钮单击监听器b2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 加载URL assets目录下的内容可以用 "file:///android_asset" 前缀wv.loadUrl("file:///android_asset/html/test3.html");}});// 定义并绑定按钮单击监听器b3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Picture pic = wv.capturePicture();int width = pic.getWidth();int height = pic.getHeight();if (width > 0 && height > 0) {Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bmp);pic.draw(canvas);try {String fileName = "sdcard/" + System.currentTimeMillis() + ".png";FileOutputStream fos = new FileOutputStream(fileName);if (fos != null) {bmp.compress(Bitmap.CompressFormat.PNG, 90, fos);fos.close();}Toast.makeText(getApplicationContext(), "截图成功,文件名是:" + fileName, Toast.LENGTH_SHORT).show();} catch (Exception e) {e.printStackTrace();}}}});// 创建WebViewClient对象WebViewClient wvc = new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {Toast.makeText(getApplicationContext(), "WebViewClient.shouldOverrideUrlLoading", Toast.LENGTH_SHORT).show();// 使用自己的WebView组件来响应Url加载事件,而不是使用默认浏览器器加载页面wv.loadUrl(url);// 记得消耗掉这个事件。给不知道的朋友再解释一下,Android中返回True的意思就是到此为止吧,事件就会不会冒泡传递了,我们称之为消耗掉return true;}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {Toast.makeText(getApplicationContext(), "WebViewClient.onPageStarted", Toast.LENGTH_SHORT).show();super.onPageStarted(view, url, favicon);}@Overridepublic void onPageFinished(WebView view, String url) {Toast.makeText(getApplicationContext(), "WebViewClient.onPageFinished", Toast.LENGTH_SHORT).show();super.onPageFinished(view, url);}@Overridepublic void onLoadResource(WebView view, String url) {Toast.makeText(getApplicationContext(), "WebViewClient.onLoadResource", Toast.LENGTH_SHORT).show();super.onLoadResource(view, url);}};// 设置WebViewClient对象wv.setWebViewClient(wvc);// 创建WebViewChromeClientWebChromeClient wvcc = new WebChromeClient() {// 处理Alert事件@Overridepublic boolean onJsAlert(WebView view, String url, String message, final JsResult result) {// 构建一个Builder来显示网页中的alert对话框Builder builder = new Builder(MainWebView3.this);builder.setTitle("计算1+2的值");builder.setMessage(message);builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {result.confirm();}});builder.setCancelable(false);builder.create();builder.show();return true;}@Overridepublic void onReceivedTitle(WebView view, String title) {MainWebView3.this.setTitle("可以用onReceivedTitle()方法修改网页标题");super.onReceivedTitle(view, title);}// 处理Confirm事件@Overridepublic boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {Builder builder = new Builder(MainWebView3.this);builder.setTitle("删除确认");builder.setMessage(message);builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {result.confirm();}});builder.setNeutralButton(android.R.string.cancel, new AlertDialog.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {result.cancel();}});builder.setCancelable(false);builder.create();builder.show();return true;}// 处理提示事件@Overridepublic boolean onJsPrompt(WebView view, String url, String message, String defaultValue,JsPromptResult result) {// 看看默认的效果return super.onJsPrompt(view, url, message, defaultValue, result);}};// 设置setWebChromeClient对象wv.setWebChromeClient(wvcc);}}

 

3、运行程序,查看结果:

image

启动起来时的画面

image

点击第一个按钮,我们可以看到WebViewClient对象中定义的方法的确被调用了。

image 
点击第二个按钮,我们看到加载的网页中有两个按钮,我们知道默认情况下Android会直接忽略掉由javascript弄出来的alert等弹出信息,除非我们在WebChromeClient中覆盖onJsAlert()方法和onJsConfirm()方法,让我们分别点击它们看看效果。

image

image

接下来我们再页面中跳转几次后,使用后退按钮JC@4ZZP(}]BJHHNC]IVGS5L,查看我们是否屏蔽了Activity默认的行为,结果当然是屏蔽了^_^,这一段代码没有留意的同学回去在看一下吧。

接下来我们把页面切换到这一个网页:

image

然后我们按下第三个保存图片的按钮,不出意外的话我们截取到了该页的完整图片,并把它保存到了sdcard中了,我在这里展示一下我截取的效果给你看,别被它清晰的效果吓住就行^_^

1282569949780

好了,因为篇幅关系,我们关于WebView的功能也只能介绍到这里,关于WebView的其它功能我们在接下来的项目中会涉及到,到时候我们再一起学习,本讲就到这里吧,各位下次再见。

 
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 木木出装 木木打野 阿木木天赋 木木木 木木木木木 木木网 木木色 小木木 木木木木木木木 木木坏 木木家模特 木木子 木木林 陈木木 木木彡 木木图片 木木点 木木高 木木春 何木木 木木雪 思木木 木木猫 合木木 魏木木 万花筒多木木多 多木木多作品 神首集团木木真实身份 农家猎户木木沐 木木木子头作品 神武帝尊秦木木 一室春多木木多 清穿日常多木木多 失落大陆多木木多 木木打野出装 木木打野符文 木木是什么意思 啊木木打野符文 双月湾木木客栈 木木大乱斗出装 木木的昆虫日记