Android · 2015年5月25日 0

Android WebView 总结

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)方法。

1
2
3
4
5
6
7
8
public boolean onKeyDown(int keyCoder,KeyEvent event){
    if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){
           webview.goBack();   //goBack()表示返回webView的上一页面
            return true;
     }
     return false;
}

 

Android监听WebView滑动到底部

MainActivity如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package cn.testwebview;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import cn.testwebview.TestWebView.ScrollInterface;
/**
 * Demo描述:
 * 监听WebView滑动到底部
 *
 * 参考资料:
 * 1 http://blog.csdn.net/conant1989/article/details/8124582
 *   Thank you very much
 */
public class MainActivity extends Activity {
    private TestWebView mTestWebView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initWebView();
    }
    
    
    
    //设置WebView
    private void initWebView() {
        mTestWebView = (TestWebView) findViewById(R.id.webView);
        mTestWebView.setVerticalScrollBarEnabled(true);
        mTestWebView.setHorizontalScrollBarEnabled(false);
        mTestWebView.getSettings().setSupportZoom(true);
        mTestWebView.getSettings().setBuiltInZoomControls(true);
        mTestWebView.getSettings().setJavaScriptEnabled(true);
        
        mTestWebView.getSettings().setDomStorageEnabled(true);
        mTestWebView.getSettings().setPluginsEnabled(true);
        mTestWebView.requestFocus();
        
        mTestWebView.getSettings().setUseWideViewPort(true);
        mTestWebView.getSettings().setLoadWithOverviewMode(true);
        mTestWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        
        mTestWebView.loadUrl("http://www.ifeng.com");
        mTestWebView.setWebViewClient(new TestWebViewClient());
        webViewScroolChangeListener();
        
    }
    
    //核心代码
    private void webViewScroolChangeListener() {
        mTestWebView.setOnCustomScroolChangeListener(new ScrollInterface() {
            @Override
            public void onSChanged(int l, int t, int oldl, int oldt) {
                //WebView的总高度
                float webViewContentHeight=mTestWebView.getContentHeight() * mTestWebView.getScale();
                //WebView的现高度
                float webViewCurrentHeight=(mTestWebView.getHeight() + mTestWebView.getScrollY());
                System.out.println("webViewContentHeight="+webViewContentHeight);
                System.out.println("webViewCurrentHeight="+webViewCurrentHeight);
                if ((webViewContentHeight-webViewCurrentHeight) == 0) {
                    System.out.println("WebView滑动到了底端");
                }
            }
        });
    }
    
    private class TestWebViewClient extends WebViewClient{
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            
        }
        @Override
        public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);
        }
    }
   
}

TestWebView如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package cn.testwebview;
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
public class TestWebView extends WebView {
    public ScrollInterface mScrollInterface;
    public TestWebView(Context context) {
        super(context);
    }
    public TestWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    public TestWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        mScrollInterface.onSChanged(l, t, oldl, oldt);
    }
    public void setOnCustomScroolChangeListener(ScrollInterface scrollInterface) {
        this.mScrollInterface = scrollInterface;
    }
    public interface ScrollInterface {
        public void onSChanged(int l, int t, int oldl, int oldt);
    }
}

 

main.xml如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<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"
  >
    <cn.testwebview.TestWebView
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="@string/hello_world"
        android:layout_centerInParent="true"
    />
</RelativeLayout>

 

Share this: