Android-----WebView使用
来源:互联网 发布:家用洗牙器 知乎 编辑:程序博客网 时间:2024/06/06 03:34
这里我们初步体验一下在android是使用webview浏览网页,在SDK的Dev Guide中有一个WebView的简单例子 。
在开发过程中应该注意几点:
1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
- mWebView.setWebViewClient(new WebViewClient(){
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- view.loadUrl(url);
- return true;
- }
- });
4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
- mWebView.goBack();
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。
看一个实例:
- public class WebViewDemo extends Activity {
- private WebView mWebView;
- private Handler mHandler = new Handler();
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setContentView(R.layout.webviewdemo);
- mWebView = (WebView) findViewById(R.id.webview);
- WebSettings webSettings = mWebView.getSettings();
- webSettings.setJavaScriptEnabled(true);
- mWebView.addJavascriptInterface(new Object() {
- public void clickOnAndroid() {
- mHandler.post(new Runnable() {
- public void run() {
- mWebView.loadUrl("javascript:wave()");
- }
- });
- }
- }, "demo");
- mWebView.loadUrl("file:///android_asset/demo.html");
- }
- }
我们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。
- <html>
- <mce:script language="javascript"><!--
- function wave() {
- document.getElementById("droid").src="android_waving.png";
- }
- // --></mce:script>
- <body>
- <a onClick="window.demo.clickOnAndroid()">
- <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>
- Click me!
- </a>
- </body>
- </html>
这样在javascript中就可以调用java对象的clickOnAndroid()方法了,同样我们可以在此对象中定义很多方法(比 如发短信,调用联系人列表等手机系统功能。),这里wave()方法是java中调用javascript的例子。
这里还有几个知识点:
1)为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"
2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的。
隐藏地址栏:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
wv = (WebView) findViewById(R.id.wv1);
wv.loadUrl("http://wangjun.easymorse.com/");
wv.setWebViewClient(new WebViewClientDemo());
}
private class WebViewClientDemo extends WebViewClient {
@Override
// 在WebView中而不是默认浏览器中显示页面
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
webview访问网站,当时老是出现“找不到网页,网页可能暂时出现故障
原因:配置文件没加权限。
解决方法:在AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
在<manifest>节点中加入<uses-permission android:name="android.permission.INTERNET" />
- WebView--- Android WebView使用总结
- Android WebView的使用
- android WebView使用
- Android WebView的使用
- Android WebView使用
- Android-----WebView使用
- Android-----WebView使用
- Android中的WebView使用
- Android-----WebView使用
- Android Webview使用
- Android-----WebView使用
- Android WebView使用
- Android WebView使用
- Android-----WebView使用
- Android WebView使用总结
- Android WebView使用
- Android-----WebView使用
- Android-WebView的使用
- linux开机启动过程简介
- 禁用网上邻居属性和禁止修改IP地址
- 加載圖片&緩存圖片&onload監聽
- java CollectionUtils 包
- HTTP协议详解
- Android-----WebView使用
- android调试出现E/AndroidRuntime(13678): java.lang.NoClassDefFoundError:
- 编程面试的10大算法概念汇总
- linux脚本学习
- Android界面设计之——类似百度手机助手的两层导航实现
- Windbg双机调试
- while my time-- , will the meaning++?
- 编程面试的10大算法概念汇总
- sqlserver中不同服务器的数据库数据同步存储过程