Android WebView组件用法详解
程序员文章站
2024-02-23 12:59:40
本文实例讲述了android webview组件用法。分享给大家供大家参考,具体如下:
如果想webview能够访问网络,必须在androidmanifest.xml里面...
本文实例讲述了android webview组件用法。分享给大家供大家参考,具体如下:
如果想webview能够访问网络,必须在androidmanifest.xml里面添加权限
<uses-permission android:name="android.permission.internet" />
main.xml很简单,就是一个webview
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <webview android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </linearlayout>
webviewdemoactivity.java代码:
package com.tianjf; import android.app.activity; import android.os.bundle; import android.webkit.webview; public class webviewdemoactivity extends activity { private webview mwebview; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); mwebview = (webview) findviewbyid(r.id.webview); // 得到websettings对象,设置支持javascript参数 // 如果访问的页面中有javascript,则webview必须设置支持javascript ,否则显示空白页面 mwebview.getsettings().setjavascriptenabled(true); // 加载url mwebview.loadurl("http://www.baidu.com/"); } }
运行一下就会看到url被正确load出来了。
但是有个问题,当点击链接继续浏览,则会弹出系统默认的browser,为了能够继续在webview中浏览,要用到shouldoverrideurlloading方法:
@override public void oncreate(bundle savedinstancestate) { 。。。。。。。。。。。。。。。。。。。。。。。。 // 虽然google主页在webview中显示了,但是如果点击链接继续浏览,则会显示到系统默认的browser中 // 为了继续在webview中显示,需要重写shouldoverrideurlloading方法 mwebview.setwebviewclient(new mywebviewclient()); 。。。。。。。。。。。。。。。。。。。。。。。。 } private class mywebviewclient extends webviewclient { @override public boolean shouldoverrideurlloading(webview view, string url) { view.loadurl(url); return true; } }
另外,如果想按回退键回到上一个页面,那么
/** * 按back键可以回到上个网页 */ @override public boolean onkeydown(int keycode, keyevent event) { if ((keycode == keyevent.keycode_back) && mwebview.cangoback()) { mwebview.goback(); return true; } return super.onkeydown(keycode, event); }
对于android 2.0开始又多出了一种新的方法,对于activity 可以单独获取back键的按下事件,直接重写onbackpressed 方法即可,代码如下
@override public void onbackpressed() { // 这里处理逻辑代码,该方法仅适用于2.0或更高版本的sdk return ; }
如果想加载工程中的html,那么可以用到下面的方法(前提是html放在assets目录中)
mwebview.loadurl("file:///android_asset/test.html");
如果想直接load一段html文,可以用下面的方法
mwebview.loaddata("<html><body>abcdefg</body></html>", "text/html", "utf-8");
下面是webview其他的一下用法:
设置允许访问文件数据
mwebview.getsettings().setallowfileaccess(true);
设置支持缩放
mwebview.getsettings().setbuiltinzoomcontrols(true);
设置是否保存密码
mwebview.getsettings().setsavepassword(false);
设置支持各种不同的设备
复制代码 代码如下:
mwebview.getsettings().setuseragentstring("mozilla/5.0 (ipad; u; cpu os 3_2 like mac os x;en-us) applewebkit/531.21.10 (khtml, like gecko) version/4.0.4 mobile/7b334bsafari/531.21.10");
加载webview网页时所要执行的一些方法
mwebview.setwebviewclient(new webviewclient() { // 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示 @override public boolean shouldoverrideurlloading(webview view, string url) { view.loadurl(url); return true; } // 开始加载网页时要做的工作 @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); } // 加载错误时要做的工作 @override public void onreceivederror(webview view, int errorcode, string description, string failingurl) { super.onreceivederror(view, errorcode, description, failingurl); } });
处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)
mwebview.setwebchromeclient(new webchromeclient() { // 提示对话框 @override public boolean onjsalert(webview view, string url, string message, final jsresult result) { // 构建一个builder来显示网页中的alert对话框 builder builder = new builder(webviewdemoactivity.this); builder.settitle("提示对话框"); builder.setmessage(message); builder.setpositivebutton(android.r.string.ok, new alertdialog.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { result.confirm(); } }); builder.setcancelable(false); builder.create(); builder.show(); return true; } // 带按钮的对话框 @override public boolean onjsconfirm(webview view, string url, string message, final jsresult result) { builder builder = new builder(webviewdemoactivity.this); builder.settitle("带选择的对话框"); builder.setmessage(message); builder.setpositivebutton(android.r.string.ok, new alertdialog.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { result.confirm(); } }); builder.setneutralbutton(android.r.string.cancel, new alertdialog.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { result.cancel(); } }); builder.setcancelable(false); builder.create(); builder.show(); return true; } // 带输入框的对话框 @override public boolean onjsprompt(webview view, string url, string message, string defaultvalue, final jspromptresult result) { layoutinflater inflater = layoutinflater .from(webviewdemoactivity.this); final view v = inflater.inflate(r.layout.mydialog, null); // 设置 textview对应网页中的提示信息 ((textview) v.findviewbyid(r.id.textview)).settext(message); // 设置edittext对应网页中的输入框 ((edittext) v.findviewbyid(r.id.edittext)) .settext(defaultvalue); builder builder = new builder(webviewdemoactivity.this); builder.settitle("带输入的对话框"); builder.setview(v); builder.setpositivebutton(android.r.string.ok, new alertdialog.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { string value = ((edittext) v .findviewbyid(r.id.edittext)).gettext() .tostring(); result.confirm(value); } }); builder.setnegativebutton(android.r.string.cancel, new alertdialog.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { result.cancel(); } }); builder.setoncancellistener(new dialoginterface.oncancellistener() { @override public void oncancel(dialoginterface dialog) { result.cancel(); } }); builder.create(); builder.show(); return true; } // 设置网页加载的进度条 @override public void onprogresschanged(webview view, int newprogress) { webviewdemoactivity.this.getwindow().setfeatureint( window.feature_progress, newprogress * 100); super.onprogresschanged(view, newprogress); } // 设置应用程序的标题 @override public void onreceivedtitle(webview view, string title) { webviewdemoactivity.this.settitle(title); super.onreceivedtitle(view, title); } });
更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android多媒体操作技巧汇总(音频,视频,录音等)》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
推荐阅读