WebView加载有3中方式:
1> WebView .loadUrl(String strhtml); 用于加载网页的内容,注意需要加权限 ""
本地连接放在assets文件下, WebView.loadUrl("file:///android_aasset/html/")
2> WebView .loadData(String data, String mimeType, String encoding);
data:文件要加载的网络内容
mimeType 加载网页内容的类型(type/html,image/jpeg)
encoding 加载网络内容所设置的编码格式(gbk/utf-8);
3> LoadDataWithBaseURL()
一般用WebView.loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String
historyUrl) 跟loadData相比,优先选择
一般要支持js,要设置 WebSessings settings=webview.getAebSettings(); 要设置其属性
WebSettings, WebViewClient, WebChromClient相对于WebView的功能
1 . WebSetting是用于设置WebView的实行和状态,
WebSettings webSettings=mWebView.getSettings();
//设置支持js *****************必须设置,默认值为false
settings.setJavaScriptEnabled(true);
//设置支持缩放
settings.setBuiltInZoomControls(true);
//设置支持加载图片
wSet.setBlockNetworkImage(false);
//设置支持缓存
settings.setAppCacheEnabled(true);
//设置缓存模式为默认
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
setAllowFileAccess 启用或禁止WebView访问文件数据
setBlockNetworkImage 是否显示网络图像
setBuiltInZoomControls 设置是否支持缩放
setCacheMode 设置缓冲的模式
setDefaultFontSize 设置默认的字体大小
setDefaultTextEncodingName 设置在解码时使用的默认编码
setFixedFontFamily设置固定使用的字体
setJavaScriptEnabled 设置是否支持Javascript
setLayoutAlgorithm 设置布局方式
setLightTouchEnabled 设置用鼠标激活被选项
setSupportZoom 设置是否支持变焦
WebViewClient就是专门辅助WebView处理各种通知、请求等事件的类。可以通过WebView的setWebViewClient方法来指定一个WebViewClient对象。WebViewClient提供了如下的一些方法,我们可以覆盖这些方法来辅助WebView浏览网页,代码如下(我们设置覆盖shouldOverrideUrlLoading方法,使得当有新连接时,使用当前的WebView来显示):
public boolean shouldOverrideUrlLoading(WebView view,String url){
view.loadUrl(url);
return true;
}默认值为true------阻止 ,表示当前连接不能再当前wenView中加载,false表示拦截
onPageFinished 网页加载完毕
onPageStarted 网页开始加载
onReceivedError 报告错误信息
onScaleChanged WebView发生改变
shouldOverrideUrlLoading 控制新的连接在当前WebView中打开
补充:对”Back”按键的处理:如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个webView进程会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。
覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。
webview.goBack(); //goBack()表示返回webView的上一页面
经过实践,笔者发现,loadData不能加载图片内容,如果要加载图片内容或者获得更强大的Web支持请使用loadDataWithBaseURL。
2. 许多实用loadData方法的朋友都遇到显示乱码的问题,那是因为编码器设置错误导致的。我们知道String类型的数据主要是unicode编码,而WebView一般为了节省资源使用的是UTF-8编码,所以我们在loadData的时候要告诉方法怎样转码。即要告诉它要将unicode编码的内容转成UTF-8编码的内容。有些朋友虽然在loadData的时候设置了编码方式,但是还是显示乱码,这是因为还需要为WebView的text编码指定编码方式。举例如下:
WebView
wv = (WebView)findViewById(R.id.webview) ;String
content = getUnicodeContent() ;wv.getSettings().setDefaultTextEncodingName(“UTF -8”)
;wv.loadData(content,
“text/html”, “UTF-8”) ;代码如下:
WebSettings wSet = wView.getSettings();
wSet.setJavaScriptEnabled(true);
//设置支持缩放
wSet.setBuiltInZoomControls(true);
//设置支持加载图片
wSet.setBlockNetworkImage(false);
//设置支持缓存
wSet.setAppCacheEnabled(true);
//设置缓存模式为默认
wSet.setCacheMode(WebSettings.LOAD_DEFAULT);
wSet.setCacheMode(WebSettings.LOAD_DEFAULT);
mt_rel = (RelativeLayout) findViewById(R.id.mt_rel);
// 创建WebViewClient对象
WebViewClient wvc = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 使用自己的WebView组件来响应Url加载事件,而不是使用默认浏览器器加载页面
wView.loadUrl(url);
// 记得消耗掉这个事件。给不知道的朋友再解释一下,Android中返回True的意思就是到此为止吧,事件就会不会冒泡传递了,我们称之为消耗掉
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) {
//Toast.makeText(getApplicationContext(), "WebViewClient.onPageFinished", Toast.LENGTH_SHORT).show();
super.onPageFinished(view, url);
mCustomDialog.dismiss();;
}
@Override
public void onLoadResource(WebView view, String url) {
//Toast.makeText(getApplicationContext(), "WebViewClient.onLoadResource", Toast.LENGTH_SHORT).show();
super.onLoadResource(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode,String description, String failingUrl)
{//Toast.makeText(getApplicationContext(), "WebViewClient.onReceivedError", Toast.LENGTH_SHORT).show();
super.onReceivedError(view, errorCode, description, failingUrl);
}
@Override
public void onScaleChanged(WebView view, float oldScale, float newScale) {
//Toast.makeText(getApplicationContext(), "WebViewClient.onScaleChanged", Toast.LENGTH_SHORT).show();
super.onScaleChanged(view, oldScale, newScale);
}
};
//webView的缓存:点击返回键
/**
* WebView对于Back按键的响应是整个退出,如果希望一级一级退出,则需要监听Back按键
* 监听按键弹起的状态
* 返回值 true表示在此拦截,不再向下传递
*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.d(TAG, "onKeyUp keyCode: " + keyCode);
if(keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()){
mWebView.goBack();
return true;
}
return super.onKeyUp(keyCode, event);
}
由此可见:
loadData("<html><head>test<a
href=\"http://wap.bai.com\">中文</a></html>", "text/html", "UTF-8");
最好使用: LOadDataWithBaseUrl();方法进行加载。
老于始终坚信:
没有做不到的,只有想不到了。
最后附上自己的博客地址:http://blog.csdn.net/androidstarjack
欢迎大家与老于一起进行探究和学习