webview android需要吗,android-webview

1.1 Android WebView 一些基本概念

开发过程中应该注意:

1.AndroidManifest.xml 中必须使用许可android.permission.INTERNET.否则会出Web page not available错误

2.如果访问的页面中有javascript,则WebView必须设置支持javascript

WebView.setSettings().setJavaScriptEnable(true);

3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webView的WebViewClient对象

wv1.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return true; } });

4.如果不做任何处理,浏览网页,点击系统back键,整个browser会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if ((keyCode == KeyEvent.KEYCODE_BACK) && wv1.canGoBack()) { wv1.goBack(); return true; } return super.onKeyDown(keyCode, event); }

下面来了解一下android中webView是如何支持javascript自定义对象的,在w3c标准中js有window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以为所欲为了。

看一个实例

public class MainActivity extends Activity { private WebView wv1; private Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wv1 = (WebView) findViewById(R.id.wv); WebSettings webSettings = wv1.getSettings(); webSettings.setJavaScriptEnabled(true); wv1.addJavascriptInterface(new Object() { public void clickOnAndroid() { mHandler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub wv1.loadUrl("javascript: wave()"); } }); } }, "demo"); wv1.loadUrl("file:///android_asset/demo.html"); } }

在assets目录下加入demo.html文件

ic_launcher.png
Click me!

效果:

90d6623c4117

Paste_Image.png

我们来看看addJavascriptInterface(Object object, String name)这个方法

90d6623c4117

Paste_Image.png

该方法将一个Java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global,这样初始化后,在WebView加载的页面中就可以通过javascript:window.demo访问到绑定的java对象了

javascript中就可以调用java对象的clickOnAndroid()方法了,同样,我们可以在此对象中定义很多方法,

注意:

1.为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为“file://android_asset/",WebView遇到这样 的schema就去当前包中的assets目录中找内存

2.addJavascriptInterface方法中要绑定的java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用handler的目的。

1.2 Android WebView 组件的使用详情

网络内容

loadUrl 直接显示网页内容(单独显示网络图片)

loadData 显示中文网页内容(含空格的处理)

APK 包含文件

LoadUrl显示APK中Html和图片文件

LoadData(loadDataWithBaseURL)显示APK中图片和文字混合的Html内容

package com.example.demo2; import java.net.URLEncoder; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; @SuppressLint("JavascriptInterface") public class MainActivity extends Activity { final String mimeType = "text/html"; final String encoding = "utf-8"; WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.wv); webView.getSettings().setJavaScriptEnabled(true); webHtml(); webImage(); localHtmlZh(); localHtmlBlankSpace(); localHtmlImage(); }

/***

* 显示本地图片和文字混合的html内容

*/

private void localHtmlImage() {

// TODO Auto-generated method stub

try {

String data = "测试本地图片和文字混合显示,这是APK里的图片";

// SDK1.5本地文件处理(不能显示图片)

// webView.loadData(URLEncoder.encode(data, encoding), mimeType,

// encoding);

// SDK1.6及以后版本

webView.loadData(data, mimeType, encoding);

// 本地文件处理(能显示图片)

webView.loadDataWithBaseURL("about: blank", data, mimeType,

encoding, "");

} catch (Exception ex) {

ex.printStackTrace();

}

}

/**

* 中文显示(空格的处理)

*/

private void localHtmlBlankSpace() {

// TODO Auto-generated method stub

try {

String data = "测试含有空格的Html数据";

webView.loadData(URLEncoder.encode(data, encoding), mimeType,

encoding);

webView.loadData(data, mimeType, encoding);

webView.loadData(

URLEncoder.encode(data, encoding).replaceAll("+", " "),

mimeType, encoding);

} catch (Exception ex) {

ex.printStackTrace();

}

}

/**

* 中文显示

*/

private void localHtmlZh() {

// TODO Auto-generated method stub

try {

String data = "测试含有中文的html数据";

// WebView.loadData(data, mimeType, encoding);

webView.loadData(URLEncoder.encode(data, encoding), mimeType,

encoding);

} catch (Exception ex) {

ex.printStackTrace();

}

}

/**

* 直接网络图片显示

*/

private void webImage() {

// TODO Auto-generated method stub

try {

webView.loadUrl("http://h.hiphotos.baidu.com/image/w%3D230/sign=648d06b8a41ea8d38a227307a70b30cf/38dbb6fd5266d0165e532f2b952bd40735fa356e.jpg");

} catch (Exception ex) {

ex.printStackTrace();

}

}

/*

* 直接显示网页

*/

private void webHtml() {

// TODO Auto-generated method stub

try {

webView.loadUrl("http://www.baidu.com");

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

2.1 Android编写简单的WebView

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值