• 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

  • 相关阅读:
    2017 《Java》预备作业计科1502宋奇蕊
    在 Kubernetes 上调度 GPU 资源
    ceph
    网络设备的 38 个知识点
    CF1066 ABCD
    单调队列优化动态规划
    对拍
    【关于此博客】
    使用Morphia框架操作mongodb
    通过mybatis读取数据库数据并提供rest接口访问
  • 原文地址:https://www.cnblogs.com/jingmengxintang/p/5787644.html
Copyright © 2020-2023  润新知