1、添加权限:AndroidManifest.xml中必须使用许可”android.permission.INTERNET”,否则会出Web page not available错误。 2、在要Activity中生成一个WebView组件:WebView webView = new WebView(this); 3、设置WebView基本信息: 如果访问的页面中有Javascript,则webview必须设置支持Javascript。 webview.getSettings().setJavaScriptEnabled(true); 触摸焦点起作用 requestFocus(); 取消滚动条 this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY); 4、设置WevView要显示的网页: 互联网用:webView.loadUrl(“http://www.google.com”); 本地文件用:webView.loadUrl(“file:///android_asset/XX.html”); 本地文件存放在:assets文件中 5、如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。 给WebView添加一个事件监听对象(WebViewClient) 并重写其中的一些方法 shouldOverrideUrlLoading:对网页中超链接按钮的响应。 当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url onLoadResource onPageStart onPageFinish onReceiveError onReceivedHttpAuthRequest 6、如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。 [?](http://www.oschina.net/question/163910_26516#) <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `public` `boolean` `onKeyDown(``int` `keyCoder,KeyEvent event){` </div> <div class="line number2 index1 alt1"> ` ``if``(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){` </div> <div class="line number3 index2 alt2"> ` ``webview.goBack(); ``//goBack()表示返回webView的上一页面` </div> <div class="line number4 index3 alt1"> </div> <div class="line number5 index4 alt2"> ` ``return` `true``;` </div> <div class="line number6 index5 alt1"> ` ``}` </div> <div class="line number7 index6 alt2"> ` ``return` `false``;` </div> <div class="line number8 index7 alt1"> `}` </div> </div> </td> </tr> </table> ### Android监听WebView滑动到底部 MainActivity如下: <div> <div id="highlighter_5859" class="syntaxhighlighter java"> <div class="toolbar"> [?](http://www.open-open.com/lib/view/open1379383341959.html#) </div> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> <div class="line number17 index16 alt2"> 17 </div> <div class="line number18 index17 alt1"> 18 </div> <div class="line number19 index18 alt2"> 19 </div> <div class="line number20 index19 alt1"> 20 </div> <div class="line number21 index20 alt2"> 21 </div> <div class="line number22 index21 alt1"> 22 </div> <div class="line number23 index22 alt2"> 23 </div> <div class="line number24 index23 alt1"> 24 </div> <div class="line number25 index24 alt2"> 25 </div> <div class="line number26 index25 alt1"> 26 </div> <div class="line number27 index26 alt2"> 27 </div> <div class="line number28 index27 alt1"> 28 </div> <div class="line number29 index28 alt2"> 29 </div> <div class="line number30 index29 alt1"> 30 </div> <div class="line number31 index30 alt2"> 31 </div> <div class="line number32 index31 alt1"> 32 </div> <div class="line number33 index32 alt2"> 33 </div> <div class="line number34 index33 alt1"> 34 </div> <div class="line number35 index34 alt2"> 35 </div> <div class="line number36 index35 alt1"> 36 </div> <div class="line number37 index36 alt2"> 37 </div> <div class="line number38 index37 alt1"> 38 </div> <div class="line number39 index38 alt2"> 39 </div> <div class="line number40 index39 alt1"> 40 </div> <div class="line number41 index40 alt2"> 41 </div> <div class="line number42 index41 alt1"> 42 </div> <div class="line number43 index42 alt2"> 43 </div> <div class="line number44 index43 alt1"> 44 </div> <div class="line number45 index44 alt2"> 45 </div> <div class="line number46 index45 alt1"> 46 </div> <div class="line number47 index46 alt2"> 47 </div> <div class="line number48 index47 alt1"> 48 </div> <div class="line number49 index48 alt2"> 49 </div> <div class="line number50 index49 alt1"> 50 </div> <div class="line number51 index50 alt2"> 51 </div> <div class="line number52 index51 alt1"> 52 </div> <div class="line number53 index52 alt2"> 53 </div> <div class="line number54 index53 alt1"> 54 </div> <div class="line number55 index54 alt2"> 55 </div> <div class="line number56 index55 alt1"> 56 </div> <div class="line number57 index56 alt2"> 57 </div> <div class="line number58 index57 alt1"> 58 </div> <div class="line number59 index58 alt2"> 59 </div> <div class="line number60 index59 alt1"> 60 </div> <div class="line number61 index60 alt2"> 61 </div> <div class="line number62 index61 alt1"> 62 </div> <div class="line number63 index62 alt2"> 63 </div> <div class="line number64 index63 alt1"> 64 </div> <div class="line number65 index64 alt2"> 65 </div> <div class="line number66 index65 alt1"> 66 </div> <div class="line number67 index66 alt2"> 67 </div> <div class="line number68 index67 alt1"> 68 </div> <div class="line number69 index68 alt2"> 69 </div> <div class="line number70 index69 alt1"> 70 </div> <div class="line number71 index70 alt2"> 71 </div> <div class="line number72 index71 alt1"> 72 </div> <div class="line number73 index72 alt2"> 73 </div> <div class="line number74 index73 alt1"> 74 </div> <div class="line number75 index74 alt2"> 75 </div> <div class="line number76 index75 alt1"> 76 </div> <div class="line number77 index76 alt2"> 77 </div> <div class="line number78 index77 alt1"> 78 </div> <div class="line number79 index78 alt2"> 79 </div> <div class="line number80 index79 alt1"> 80 </div> <div class="line number81 index80 alt2"> 81 </div> <div class="line number82 index81 alt1"> 82 </div> <div class="line number83 index82 alt2"> 83 </div> <div class="line number84 index83 alt1"> 84 </div> <div class="line number85 index84 alt2"> 85 </div> <div class="line number86 index85 alt1"> 86 </div> <div class="line number87 index86 alt2"> 87 </div> <div class="line number88 index87 alt1"> 88 </div> <div class="line number89 index88 alt2"> 89 </div> <div class="line number90 index89 alt1"> 90 </div> <div class="line number91 index90 alt2"> 91 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `package` `cn.testwebview;` </div> <div class="line number2 index1 alt1"> `import` `android.app.Activity;` </div> <div class="line number3 index2 alt2"> `import` `android.graphics.Bitmap;` </div> <div class="line number4 index3 alt1"> `import` `android.os.Bundle;` </div> <div class="line number5 index4 alt2"> `import` `android.webkit.WebSettings;` </div> <div class="line number6 index5 alt1"> `import` `android.webkit.WebView;` </div> <div class="line number7 index6 alt2"> `import` `android.webkit.WebViewClient;` </div> <div class="line number8 index7 alt1"> `import` `cn.testwebview.TestWebView.ScrollInterface;` </div> <div class="line number9 index8 alt2"> `/**` </div> <div class="line number10 index9 alt1"> ` ``* Demo描述:` </div> <div class="line number11 index10 alt2"> ` ``* 监听WebView滑动到底部` </div> <div class="line number12 index11 alt1"> ` ``*` </div> <div class="line number13 index12 alt2"> ` ``* 参考资料:` </div> <div class="line number14 index13 alt1"> ` ``* 1 http://blog.csdn.net/conant1989/article/details/8124582` </div> <div class="line number15 index14 alt2"> ` ``* Thank you very much` </div> <div class="line number16 index15 alt1"> ` ``*/` </div> <div class="line number17 index16 alt2"> `public` `class` `MainActivity ``extends` `Activity {` </div> <div class="line number18 index17 alt1"> ` ``private` `TestWebView mTestWebView;` </div> <div class="line number19 index18 alt2"> ` ``@Override` </div> <div class="line number20 index19 alt1"> ` ``protected` `void` `onCreate(Bundle savedInstanceState) {` </div> <div class="line number21 index20 alt2"> ` ``super``.onCreate(savedInstanceState);` </div> <div class="line number22 index21 alt1"> ` ``setContentView(R.layout.main);` </div> <div class="line number23 index22 alt2"> ` ``initWebView();` </div> <div class="line number24 index23 alt1"> ` ``}` </div> <div class="line number25 index24 alt2"> ` ` </div> <div class="line number26 index25 alt1"> ` ` </div> <div class="line number27 index26 alt2"> ` ` </div> <div class="line number28 index27 alt1"> ` ``//设置WebView` </div> <div class="line number29 index28 alt2"> ` ``private` `void` `initWebView() {` </div> <div class="line number30 index29 alt1"> ` ``mTestWebView = (TestWebView) findViewById(R.id.webView);` </div> <div class="line number31 index30 alt2"> ` ``mTestWebView.setVerticalScrollBarEnabled(``true``);` </div> <div class="line number32 index31 alt1"> ` ``mTestWebView.setHorizontalScrollBarEnabled(``false``);` </div> <div class="line number33 index32 alt2"> ` ``mTestWebView.getSettings().setSupportZoom(``true``);` </div> <div class="line number34 index33 alt1"> ` ``mTestWebView.getSettings().setBuiltInZoomControls(``true``);` </div> <div class="line number35 index34 alt2"> ` ``mTestWebView.getSettings().setJavaScriptEnabled(``true``);` </div> <div class="line number36 index35 alt1"> ` ` </div> <div class="line number37 index36 alt2"> ` ``mTestWebView.getSettings().setDomStorageEnabled(``true``);` </div> <div class="line number38 index37 alt1"> ` ``mTestWebView.getSettings().setPluginsEnabled(``true``);` </div> <div class="line number39 index38 alt2"> ` ``mTestWebView.requestFocus();` </div> <div class="line number40 index39 alt1"> ` ` </div> <div class="line number41 index40 alt2"> ` ``mTestWebView.getSettings().setUseWideViewPort(``true``);` </div> <div class="line number42 index41 alt1"> ` ``mTestWebView.getSettings().setLoadWithOverviewMode(``true``);` </div> <div class="line number43 index42 alt2"> ` ``mTestWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);` </div> <div class="line number44 index43 alt1"> ` ` </div> <div class="line number45 index44 alt2"> ` ``mTestWebView.loadUrl(``"http://www.ifeng.com"``);` </div> <div class="line number46 index45 alt1"> ` ``mTestWebView.setWebViewClient(``new` `TestWebViewClient());` </div> <div class="line number47 index46 alt2"> ` ``webViewScroolChangeListener();` </div> <div class="line number48 index47 alt1"> ` ` </div> <div class="line number49 index48 alt2"> ` ``}` </div> <div class="line number50 index49 alt1"> ` ` </div> <div class="line number51 index50 alt2"> ` ``//核心代码` </div> <div class="line number52 index51 alt1"> ` ``private` `void` `webViewScroolChangeListener() {` </div> <div class="line number53 index52 alt2"> ` ``mTestWebView.setOnCustomScroolChangeListener(``new` `ScrollInterface() {` </div> <div class="line number54 index53 alt1"> ` ``@Override` </div> <div class="line number55 index54 alt2"> ` ``public` `void` `onSChanged(``int` `l, ``int` `t, ``int` `oldl, ``int` `oldt) {` </div> <div class="line number56 index55 alt1"> ` ``//WebView的总高度` </div> <div class="line number57 index56 alt2"> ` ``float` `webViewContentHeight=mTestWebView.getContentHeight() * mTestWebView.getScale();` </div> <div class="line number58 index57 alt1"> ` ``//WebView的现高度` </div> <div class="line number59 index58 alt2"> ` ``float` `webViewCurrentHeight=(mTestWebView.getHeight() + mTestWebView.getScrollY());` </div> <div class="line number60 index59 alt1"> ` ``System.out.println(``"webViewContentHeight="``+webViewContentHeight);` </div> <div class="line number61 index60 alt2"> ` ``System.out.println(``"webViewCurrentHeight="``+webViewCurrentHeight);` </div> <div class="line number62 index61 alt1"> ` ``if` `((webViewContentHeight-webViewCurrentHeight) == ````) {` </div> <div class="line number63 index62 alt2"> ` ``System.out.println(``"WebView滑动到了底端"``);` </div> <div class="line number64 index63 alt1"> ` ``}` </div> <div class="line number65 index64 alt2"> ` ``}` </div> <div class="line number66 index65 alt1"> ` ``});` </div> <div class="line number67 index66 alt2"> ` ``}` </div> <div class="line number68 index67 alt1"> ` ` </div> <div class="line number69 index68 alt2"> </div> <div class="line number70 index69 alt1"> ` ``private` `class` `TestWebViewClient ``extends` `WebViewClient{` </div> <div class="line number71 index70 alt2"> ` ``@Override` </div> <div class="line number72 index71 alt1"> ` ``public` `void` `onPageStarted(WebView view, String url, Bitmap favicon) {` </div> <div class="line number73 index72 alt2"> ` ``super``.onPageStarted(view, url, favicon);` </div> <div class="line number74 index73 alt1"> ` ``}` </div> <div class="line number75 index74 alt2"> ` ``@Override` </div> <div class="line number76 index75 alt1"> ` ``public` `boolean` `shouldOverrideUrlLoading(WebView view, String url) {` </div> <div class="line number77 index76 alt2"> ` ``view.loadUrl(url);` </div> <div class="line number78 index77 alt1"> ` ``return` `true``;` </div> <div class="line number79 index78 alt2"> ` ``}` </div> <div class="line number80 index79 alt1"> ` ``@Override` </div> <div class="line number81 index80 alt2"> ` ``public` `void` `onPageFinished(WebView view, String url) {` </div> <div class="line number82 index81 alt1"> ` ``super``.onPageFinished(view, url);` </div> <div class="line number83 index82 alt2"> ` ` </div> <div class="line number84 index83 alt1"> ` ``}` </div> <div class="line number85 index84 alt2"> ` ``@Override` </div> <div class="line number86 index85 alt1"> ` ``public` `void` `onReceivedError(WebView view, ``int` `errorCode,String description, String failingUrl) {` </div> <div class="line number87 index86 alt2"> ` ``super``.onReceivedError(view, errorCode, description, failingUrl);` </div> <div class="line number88 index87 alt1"> ` ``}` </div> <div class="line number89 index88 alt2"> ` ``}` </div> <div class="line number90 index89 alt1"> ` ` </div> <div class="line number91 index90 alt2"> `}` </div> </div> </td> </tr> </table> </div> </div> TestWebView如下: <div> <div id="highlighter_625536" class="syntaxhighlighter java"> <div class="toolbar"> [?](http://www.open-open.com/lib/view/open1379383341959.html#) </div> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> <div class="line number17 index16 alt2"> 17 </div> <div class="line number18 index17 alt1"> 18 </div> <div class="line number19 index18 alt2"> 19 </div> <div class="line number20 index19 alt1"> 20 </div> <div class="line number21 index20 alt2"> 21 </div> <div class="line number22 index21 alt1"> 22 </div> <div class="line number23 index22 alt2"> 23 </div> <div class="line number24 index23 alt1"> 24 </div> <div class="line number25 index24 alt2"> 25 </div> <div class="line number26 index25 alt1"> 26 </div> <div class="line number27 index26 alt2"> 27 </div> <div class="line number28 index27 alt1"> 28 </div> <div class="line number29 index28 alt2"> 29 </div> <div class="line number30 index29 alt1"> 30 </div> <div class="line number31 index30 alt2"> 31 </div> <div class="line number32 index31 alt1"> 32 </div> <div class="line number33 index32 alt2"> 33 </div> <div class="line number34 index33 alt1"> 34 </div> <div class="line number35 index34 alt2"> 35 </div> <div class="line number36 index35 alt1"> 36 </div> <div class="line number37 index36 alt2"> 37 </div> <div class="line number38 index37 alt1"> 38 </div> <div class="line number39 index38 alt2"> 39 </div> <div class="line number40 index39 alt1"> 40 </div> <div class="line number41 index40 alt2"> 41 </div> <div class="line number42 index41 alt1"> 42 </div> <div class="line number43 index42 alt2"> 43 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `package` `cn.testwebview;` </div> <div class="line number2 index1 alt1"> </div> <div class="line number3 index2 alt2"> `import` `android.content.Context;` </div> <div class="line number4 index3 alt1"> `import` `android.util.AttributeSet;` </div> <div class="line number5 index4 alt2"> `import` `android.webkit.WebView;` </div> <div class="line number6 index5 alt1"> </div> <div class="line number7 index6 alt2"> `public` `class` `TestWebView ``extends` `WebView {` </div> <div class="line number8 index7 alt1"> ` ``public` `ScrollInterface mScrollInterface;` </div> <div class="line number9 index8 alt2"> </div> <div class="line number10 index9 alt1"> ` ``public` `TestWebView(Context context) {` </div> <div class="line number11 index10 alt2"> ` ``super``(context);` </div> <div class="line number12 index11 alt1"> ` ``}` </div> <div class="line number13 index12 alt2"> </div> <div class="line number14 index13 alt1"> ` ``public` `TestWebView(Context context, AttributeSet attrs, ``int` `defStyle) {` </div> <div class="line number15 index14 alt2"> ` ``super``(context, attrs, defStyle);` </div> <div class="line number16 index15 alt1"> ` ``}` </div> <div class="line number17 index16 alt2"> </div> <div class="line number18 index17 alt1"> ` ``public` `TestWebView(Context context, AttributeSet attrs) {` </div> <div class="line number19 index18 alt2"> ` ``super``(context, attrs);` </div> <div class="line number20 index19 alt1"> ` ``}` </div> <div class="line number21 index20 alt2"> </div> <div class="line number22 index21 alt1"> ` ``@Override` </div> <div class="line number23 index22 alt2"> ` ``protected` `void` `onScrollChanged(``int` `l, ``int` `t, ``int` `oldl, ``int` `oldt) {` </div> <div class="line number24 index23 alt1"> </div> <div class="line number25 index24 alt2"> ` ``super``.onScrollChanged(l, t, oldl, oldt);` </div> <div class="line number26 index25 alt1"> </div> <div class="line number27 index26 alt2"> ` ``mScrollInterface.onSChanged(l, t, oldl, oldt);` </div> <div class="line number28 index27 alt1"> </div> <div class="line number29 index28 alt2"> ` ``}` </div> <div class="line number30 index29 alt1"> </div> <div class="line number31 index30 alt2"> ` ``public` `void` `setOnCustomScroolChangeListener(ScrollInterface scrollInterface) {` </div> <div class="line number32 index31 alt1"> </div> <div class="line number33 index32 alt2"> ` ``this``.mScrollInterface = scrollInterface;` </div> <div class="line number34 index33 alt1"> </div> <div class="line number35 index34 alt2"> ` ``}` </div> <div class="line number36 index35 alt1"> </div> <div class="line number37 index36 alt2"> ` ``public` `interface` `ScrollInterface {` </div> <div class="line number38 index37 alt1"> </div> <div class="line number39 index38 alt2"> ` ``public` `void` `onSChanged(``int` `l, ``int` `t, ``int` `oldl, ``int` `oldt);` </div> <div class="line number40 index39 alt1"> </div> <div class="line number41 index40 alt2"> ` ``}` </div> <div class="line number42 index41 alt1"> </div> <div class="line number43 index42 alt2"> `}` </div> </div> </td> </tr> </table> </div> </div> main.xml如下: <div> <div id="highlighter_380669" class="syntaxhighlighter xml"> <div class="toolbar"> [?](http://www.open-open.com/lib/view/open1379383341959.html#) </div> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `<``RelativeLayout` </div> <div class="line number2 index1 alt1"> ` ``xmlns:android``=``"http://schemas.android.com/apk/res/android"` </div> <div class="line number3 index2 alt2"> ` ``xmlns:tools``=``"http://schemas.android.com/tools"` </div> <div class="line number4 index3 alt1"> ` ``android:layout_width``=``"match_parent"` </div> <div class="line number5 index4 alt2"> ` ``android:layout_height``=``"match_parent"` </div> <div class="line number6 index5 alt1"> ` ``>` </div> <div class="line number7 index6 alt2"> </div> <div class="line number8 index7 alt1"> ` ``<``cn.testwebview.TestWebView` </div> <div class="line number9 index8 alt2"> ` ``android:id``=``"@+id/webView"` </div> <div class="line number10 index9 alt1"> ` ``android:layout_width``=``"fill_parent"` </div> <div class="line number11 index10 alt2"> ` ``android:layout_height``=``"fill_parent"` </div> <div class="line number12 index11 alt1"> ` ``android:text``=``"@string/hello_world"` </div> <div class="line number13 index12 alt2"> ` ``android:layout_centerInParent``=``"true"` </div> <div class="line number14 index13 alt1"> ` ``/>` </div> <div class="line number15 index14 alt2"> </div> <div class="line number16 index15 alt1"> `</``RelativeLayout``>` </div> </div> </td> </tr> </table> </div> </div> </div>