WebView加载方的方式

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

欢迎大家与老于一起进行探究和学习

时间: 2024-11-08 19:25:14

WebView加载方的方式的相关文章

WebView 加载网页和java 与js交互

[mw_shl_code=java,true]WebView是一个可以显示网页的控件.需求:通过WebView加载assets下的html文件.实现页面的缩放.向menu键添加:前进.后退和刷新,实现对网页的操作点击网页中的链接,仍然使用本WebView浏览器,而非调用系统的浏览器网页中有button,点击button,调用android的Toast点击WebView隐藏地址栏和button,点击menu键显示地址栏和button.WebView加载网页的方式WebView webview =

iOS WebView 加载本地资源(图片,文件等)

NSString *path = [[NSBundle mainBundle] pathForResource:@"关于.docx" ofType:nil]; NSURL *url = [NSURL fileURLWithPath:path]; NSLog(@"%@", [self mimeType:url]); //webview加载本地文件,可以使用加载数据的方式 //第一个诶参数是一个NSData, 本地文件对应的数据 //第二个参数是MIMEType //第

WebView加载HTML图片大小自适应与文章自动换行

http://www.brighttj.com/ios/ios-webview-load-html-image-adaptive.html 在很多App中都会使用到webview,尤其是在加载新闻内容等文章形式的数据时.因为图文混编以及不同字体格式的显示,在iOS进行编辑和显示都是一大问题(当然,iOS中也可以用CoreText进行绘制),但是对于web端来说,一个富文本编辑器就可以完美解决这个问题.所以后台很多时候会直接返回HTML代码拿给前端解析,这时,在客户端对HTML代码的处理就显得尤为

Android WebView加载Chromium动态库的过程分析

Chromium动态库的体积比较大,有27M左右,其中程序段和数据段分别占据25.65M和1.35M.如果按照通常方式加载Chromium动态库,那么当有N个正在运行的App使用WebView时,系统需要为Chromium动态库分配的内存为(25.65 + N x 1.35)M.这是非常可观的.为此,Android使用了特殊的方式加载Chromium动态库.本文接下来就详细分析这种特殊的加载方式. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 为什么当有

webview加载html5的问题

WebSettings ws = mViewHolder.contentWbv.getSettings(); /** * setAllowFileAccess 启用或禁止WebView访问文件数据 setBlockNetworkImage 是否显示网络图像 * setBuiltInZoomControls 设置是否支持缩放 setCacheMode 设置缓冲的模式 * setDefaultFontSize 设置默认的字体大小 setDefaultTextEncodingName 设置在解码时使用

webview加载网页与全屏播放视频?

上篇我们大致了解了webview的一些属性,以及重要的方法.这篇我们就要一些案列来说明,一般webview最广泛的作用就是,加载一个html的网页(实现与js交互),,webview加载网页网页当中含有视频,webview文件下载等等. 首先我们来了解下webview是如何加载网页的?首先我们看下网页在家的效果? 代码也是比较简单 1 package cn.xiao.webviewplayvideo; 2 import android.app.Activity; 3 import android

Android开发必知--WebView加载html5实现炫酷引导页面

大多数人都知道,一个APP的引导页面还是挺重要的,不过要想通过原生的Android代码做出一个非常炫酷的引导页相对还是比较复杂的,正巧html5在制作炫酷动画网页方面比较给力,我们不妨先利用html5做出手机引导页面,然后将其嵌入APP中. 首先我们分析一下,都需要做哪些工作? 1.制作html5引导页面. 2.把做好的页面放入Android工程中assets文件夹下. 3.利用WebView加载asset文件夹下的html文件. 4.在引导页最后一页的按钮上捕捉点击事件,结束引导页,进入程序.

安卓 WebView加载本地图片时居中显示

在一个项目中使用WebView显示gif图片(自定义的View无法放大gif),当图片过小时只在左侧显示,经过研究发现无论设置android:layout_gravity="center_horizontal"还是设置android:gravity="center_horizontal" 都无法居中显示,而且还设置了android:layout_width="wrap_content",但是实际上WebView并没有自适应内容,它的宽度占了屏幕宽

【iOS】WebView加载HTML图片大小自适应与文章自动换行

在很多App中都会使用到webview,尤其是在加载新闻内容等文章形式的数据时.因为图文混编以及不同字体格式的显示,在iOS进行编辑 和显示都是一大问题(当然,iOS中也可以用CoreText进行绘制),但是对于web端来说,一个富文本编辑器就可以完美解决这个问题.所以后台很多 时候会直接返回HTML代码拿给前端解析,这时,在客户端对HTML代码的处理就显得尤为重要了. 本文将讲解在webview加载HTML代码时,经常会遇到的图片自适应大小与文章内容自动换行问题. 示例Demo下载地址: ht