1.什么是WebView
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页.WebView编程也叫浏览器编程,而浏览器编程涉及到html、js和css等等。
今天学习一下如何使用WebView!!!
2.怎么使用WebView
1).
WebView的实例化有2种方法:
1.在Activity中实例化WebView组件
WebView webView = new WebView(this);
Activity.setContentView(webView );
|
2.在布局文件中声明WebView
,在Activity中实例化
2.)我们直接在WebView 上点击链接的话,会弹出Android内置的browser浏览器,而不是在我们WebView 上打开新窗口!切记切记!所以
需要调用setWebViewClient(),传入一个WebViewClient对象,需要重写shouldOverrideUrlLoading()方法。
3).
为WebView配置url:webView.loadUrl("www.baidu.com");
4).另外在WebView连接打开多个网页时,按回退键的话,不像普通的浏览器broswer是退出app,所以
需要重写Activity的OnKeyDown()方法。
5).在AndroidManifest.xml文件中添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/> //联网
|
详细代码
package com.mkk.webviewdemo;
import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.View.OnClickListener; import android.webkit.DownloadListener; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.TextView; public class MainActivity extends ActionBarActivity implements OnClickListener { WebView wv; Button back; Button refresh; TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wv = (WebView) findViewById(R.id.wv); back = (Button) findViewById(R.id.bt_back); refresh = (Button) findViewById(R.id.bt_refresh); tv = (TextView) findViewById(R.id.tv); wv.loadUrl(" http://111.1.62.72/files/4105000000342E31/dl.ops.baidu.com/appsearch_AndroidPhone_1426l.apk"); wv.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { tv.setText(title); super.onReceivedTitle(view, title); } }); wv.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return super.shouldOverrideUrlLoading(view, url); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); view.loadUrl("file:///android_asset/error.html"); } }); wv.setDownloadListener(new DownloadListener() { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { if (url.endsWith(".apk")) { Uri uri = Uri.parse(url); Intent i = new Intent(Intent.ACTION_VIEW,uri); startActivity(i); } } }); back.setOnClickListener(this); refresh.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_back: finish(); break; case R.id.bt_refresh: wv.reload(); break; default: break; } } } |
布局文件
<RelativeLayout xmlns:android="
http://schemas.android.com/apk/res/android"
xmlns:tools=" http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.mkk.webviewdemo.MainActivity" > <RelativeLayout android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="50dp" > <Button android:id="@+id/bt_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="返回" /> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_toRightOf="@+id/bt_refresh" android:text=" http://www.baidu.com" /> <Button android:id="@+id/bt_refresh" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:text="刷新" /> </RelativeLayout> <WebView android:id="@+id/wv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/rl" android:layout_marginTop="5dp" /> </RelativeLayout> |
效果图
|
3.WebView常用相关方法
WebView常用方法:
getSettings() | 返回一个WebSettings对象,用来控制WebView的属性设置 |
loadUrl(String url) | 加载指定的Url |
loadData(String data,String mimeType,String encoding) |
加载指定的Data到WebView中.使用"data:"作为标记头, 改方法不能加载网络数据.其中mimeType为数据类型如:textml,image/jpeg. encoding为字符的编码方式 |
setWebViewClient(WebViewClient client) | 为WebView指定一个WebViewClient对象.WebViewClient可 以辅助WebView处理各种通知,请求等事件。 |
setWebChromeClient(WebChromeClient client) | 为WebView指定一个WebChromeClient对象,WebChromeClient专门用来辅助WebView处理js的对话框,网站title,网站图标,加载进度条等 |
setJavaScriptEnabled(boolean flag) | 设置是否支持JavaScript |
setDefaultFontSize(int size) | 设置默认的字体大小 |
setDefaultTextEncodingName(String encoding) |
设置默认字符的编码方式
|
setAllowFileAccess(boolean allow): | 设置是否允许访问文件数据 |
setDatabaseEnabled(boolean flag) | 设置是否可以使用数据库相关的api |
setDatabasePath(String databasePath) | 若使用数据库API,该方法指定数据库文件的路径 |
setBlockN etworkImage(boolean flag) | 设置是否禁止显示图片,true表示禁止图片 |
setSavePassword(boolean save) | 设置是否保存密码 |
setTextize(WebSetting.TextSize) | 设置页面文字大小 |
setSupportZoom(bollean support) | 设置是否支持变焦 |
WebViewClient的常用方法
onPageStared(WebView view,String url) | 通知主程序网页开始加载 |
onPageFinished(WebView view,String url,Bitmap favicon) | 通知主程序,网页加载完毕 |
doUpdateVisitedHistory(WebView view,String url,boolean isReload) | 更新历史记录 |
onLoadResource(WebView view,String url) | 通知主程序WebView即将加载指定url的资源 |
onScaleChanged(WebView view,float oldScale,float newScale) | ViewView的缩放发生改变时调用 |
shouldOverrideKeyEvent(WebView view,KeyEvent event) | 控制webView是否处理按键时间,如果返回true 则WebView不处理,返回false则处理 |
shouldOverrideUrlLoading(WebView view,String url) | 控制对新加载的Url的处理,返回true,说明主程序处理 WebView不做处理,返回false意味着WebView会 对其进行处理 |
onReceivedError(WebView view,int errorCode,String description, String failingUrl) | 遇到不可恢复的错误信息时调用 |
WebChromeClient的常用方法:
onJsAlert(WebView view,String url,String message,JsResult result) | 处理Js中的Alert对话框 |
onJsConfirm(WebView view,String url,String message,JsResult result) | 处理Js中的Confirm对话框 |
onJsPrompt(WebView view,String url,String message String defaultValue,,JsPromptResult result) | 处理Js中的Prompt对话框 |
onProgressChanged(WebView view,int newProgress) | 当加载进度条发生改变时调用 |