WebView加载方的方式
一般要支持js,要设置 WebSessings settings=webview.getAebSettings(); 要设置其属性
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().setDefaultTextEncodingNa me(“UTF -8”) ;
wv.loadData(content, “text/html”, “UTF-8”) ; 代码如下:
WebSettings wSet = wView.getSettings();
// 创建WebViewClient对象
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 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欢迎大家与老于一起进行探究和学习
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。