Android——WebView

WebView用途

通过Intent调用系统浏览器:

引言:

Uri uri = Uri.parse(url);//url为你要链接的地址

Intent intent = new Intent(Intent.ACTION_VIEW,uri);

startActivity(intent);

将WebView加入你的应用:

只需在活动布局中加入<WebView>元素即可

<WebView

   android:id="..."

    ...                >

</WebView>

要在WebView加载页面,使用loadUrl()

//使页面获得焦点

webView.requestFocus();

在它有效工作之前,你要保证你的应用能访问网络。要访问网络,需要在你的配置文件中获取INTERNET权限。

     <uses-permission android:name="android.permission.INTERNET"/>

处理页面导航:

当用户点击一个WebView中的页面的链接时,通常,是由默认的浏览器打开并加载目标URL的。然而,你可以在WebView中覆盖这一行为,那么链接就会在WebView中打开。

webView.setWebViewClient( new WebViewClient() );

在WebView中使用Javascript

如果你想要加载在WebView中的web页面使用Javascript,你需要在WebView中启动Javascript。启动Javascript你可以通过WebView中带有的WebSetting来启用它。你可以通过getSettings()来获取WebSettings的值,然后通过setJavaScriptEnabled() 来启用Javascript。

WebView webView = (WebView) findViewById(R.id.webview);

WebSettings webSettings = webView.getSettings();

webSettings.setJavaScriptEnabled(true);

后退与前进:

当你的WebView覆盖了URL加载,它会自动生成历史访问记录,你可以通过goBack()或goForward()向前或向后访问已访问过的站点。

@Override

public boolean onKeyDown( int keyCode, keyEvent event){

  if(keyCode == keyEvent.KEYCODE_BACK)&&myWebView.canGoBack(){

   webView.goBack();

   return true;

}
return super.onKeyDown(keyCode,event);

}

判断页面的加载过程;

由于有些页面可能加载缓慢,所以我们需要去判断页面的加载过程,制作进度条给予用户良好的体验效果。

webView.setWebChromeClient(new WebChromeClient(){

                            @Override

                   public void onProgressChanged(WebView view, int newProgress) {

                                   if (newProgress == 100) {

                                          //页面加载完毕,关闭

                                    }else {

                                          //页面正在加载

                                   }

                            });

WebView缓存的运用:

优先使用缓存:

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

不使用缓存:

webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

public class MainActivity extends Activity {
    private String url = "http://2016.qq.com";
    private WebView webView;
    private ProgressDialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        Uri uri = Uri.parse(url);
//        Intent intent = new Intent(Intent.ACTION_VIEW,uri);
//        startActivity(intent);
        init();        
    }
    private void init() {
        // TODO Auto-generated method stub
        webView = (WebView) findViewById(R.id.webView);
    //    webView.loadUrl("file:///android_asset/baidu.html");//加载一个资源文件(本地文件)
        //加载外部资源
        webView.loadUrl("url");
        //覆盖WebView默认通过第三方或者是系统浏览器打开网页的行为,使得网页可以在webview中打开
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
                //返回值是true的时候控制网页在WebView中去打开,如果为false调用系统浏览器或第三方浏览器去打开
                view.loadUrl(url);
                return true;

            }
            //webviewClient帮助WebView去处理一些页面控制和请求通知
            
        });
        //启用支持Javascipt
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        //优先使用缓存加载
        settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        webView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                // TODO Auto-generated method stub
                 
                //newProgress  1-100之间的整数
                if (newProgress == 100) {
                    //页面加载完毕,关闭
                    closeDialog();
                    
                }else {
                    //页面正在加载
                    openDialog(newProgress);
                }
                
                super.onProgressChanged(view, newProgress);
            }

            private void openDialog(int newProgress) {
                // TODO Auto-generated method stub
                if(dialog == null){
                    dialog = new ProgressDialog(MainActivity.this);
                    dialog.setTitle("on time");
                    dialog.setProgress(ProgressDialog.STYLE_HORIZONTAL);
                    dialog.setProgress(newProgress);
                    dialog.show();
                }else{
                    dialog.setProgress(newProgress);
                }
                
            }

            private void closeDialog() {
                // TODO Auto-generated method stub
                if (dialog != null && dialog.isShowing()) {
                    dialog.dismiss();
                    dialog=null;
                    
                }
                
            }
        });
        
        
    }
    //改写物理按键——返回的逻辑
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode==KeyEvent.KEYCODE_BACK){
            if(webView.canGoBack()){
                webView.goBack();//返回上一页面
                return true;
            }else {
                System.exit(0);//退出程序
            }
        }
        
        return super.onKeyDown(keyCode, event);
    }
}

总结如下:

 webview组件如何使用

1)       添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。

2)       在要Activity中生成一个WebView组件:WebView webView = new WebView(this);或者可以在activity的layout文件里添加webview控件:

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。比如当webview内嵌网页的某个数字被点击时,它会自动认为这是一个电话请求,会传递url:tel:123,如果你不希望如此可通过重写shouldOverrideUrlLoading函数解决:

http://blog.csdn.net/chenshijun0101/article/details/7045394

原文地址:https://www.cnblogs.com/jingmengxintang/p/5787644.html