zoukankan      html  css  js  c++  java
  • 控件WebView网页的加载

    Android:控件WebView网页的加载

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用。

    webview有两个方法:setWebChromeClient 和 setWebClient

    setWebClient:主要处理解析,渲染网页等浏览器做的事情

    setWebChromeClient:辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 

    WebViewClient就是帮助WebView处理各种通知、请求事件的。

    1.在AndroidManifest.xml设置访问网络权限:

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

    控件:

    1 <WebView 
    2             android:id="@+id/wv_webnews"
    3             android:layout_height="match_parent"
    4             android:layout_width="match_parent"
    5        />

    用途一:加载本地/Web资源

    调用WebView的loadUrl()方法,

    加载本地资源

    webView = (WebView) findViewById(R.id.webView);
    webView.loadUrl("file:///android_asset/example.html");

    加载web资源:

    webView = (WebView) findViewById(R.id.webView);
    webView.loadUrl("http://baidu.com");

    用途二:在程序内打开网页

    创建一个自己的WebViewClient,通过setWebViewClient关联

     1 public class ListViewItemNewsDetailActivity extends Activity implements OnClickListener{
     2 
     3 
     4     private WebView webnews;
     5 
     6 
     7     @Override
     8     protected void onCreate(Bundle savedInstanceState) {
     9         // TODO Auto-generated method stub
    10         super.onCreate(savedInstanceState);
    11         requestWindowFeature(Window.FEATURE_NO_TITLE);
    12         setContentView(R.layout.listviewitemnews);
    13         
    14         webnews = (WebView) findViewById(R.id.wv_webnews);
    15         
    16         url = getIntent().getStringExtra("url");
    17         //webview的一些设置
    18         WebSettings settings = webnews.getSettings();
    19         settings.setJavaScriptEnabled(true);//开启js
    20         settings.setBuiltInZoomControls(true);//显示放大缩小按钮
    21         settings.setUseWideViewPort(true);//支持双击
    22         
    23         webnews.setWebViewClient(new WebViewClient(){
    24             /**
    25              * 
    26              * 网页开始加载
    27              */
    28             @Override
    29             public void onPageStarted(WebView view, String url, Bitmap favicon) {
    30                 // TODO Auto-generated method stub
    31                 super.onPageStarted(view, url, favicon);
    32                 System.out.println("网页开始加载");
    33                 pbbar.setVisibility(view.VISIBLE);
    34             }
    35             /**
    36              * 
    37              * 网页开始结束
    38              */
    39             @Override
    40             public void onPageFinished(WebView view, String url) {
    41                 // TODO Auto-generated method stub
    42                 super.onPageFinished(view, url);
    43                 System.out.println("网页开始结束");
    44                 pbbar.setVisibility(view.GONE);
    45             }
    46             /**
    47              * 所有跳转的链接都会在此方法中回调
    48              */
    49             @Override
    50             public boolean shouldOverrideUrlLoading(WebView view, String url) {
    51                 System.out.println("链接url"+url);
    52                 webnews.loadUrl(url);
    53                 return true;
    54 //                return super.shouldOverrideUrlLoading(view, url);
    55             }
    56         });
    57         
    58         68             /**
    69              * 获取新闻标题
    70              * 
    71              */
    72             @Override
    73             public void onReceivedTitle(WebView view, String title) {
    74                 System.out.println("新闻标题:"+title);
    75                 super.onReceivedTitle(view, title);
    76             }
    77         });
    78         
    79         
    80         webnews.loadUrl(url);//加载网络
    81 //        webnews.loadUrl("http://www.itheima.com/");//加载网络
    82         
    83     }
    84 }

    用途三:

    如果访问的页面中有Javascript,则webview必须设置支持Javascript

     1 settings.setJavaScriptEnabled(true);//开启js 

    用途四:

    如果希望浏览的网页后退而不是退出浏览器,需要WebView覆盖URL加载,让它自动生成历史访问记录,那样就可以通过前进或后退访问已访问过的站点。

     1 //改写物理按键——返回的逻辑
     2     @Override
     3     public boolean onKeyDown(int keyCode, KeyEvent event) {
     4         // TODO Auto-generated method stub
     5         if(keyCode==KeyEvent.KEYCODE_BACK)
     6         {
     7             if(webView.canGoBack())
     8             {
     9                 webView.goBack();//返回上一页面
    10                 return true;
    11             }
    12             else
    13             {
    14                 System.exit(0);//退出程序
    15             }
    16         }
    17         return super.onKeyDown(keyCode, event);
    18     }

    用途五:判断页面加载过程

     1 webnews.setWebChromeClient(new WebChromeClient(){
     2 59             /**
     3 60              * 进度变化
     4 61              * 
     5 62              */
     6 63             @Override
     7 64             public void onProgressChanged(WebView view, int newProgress) {
     8 65                 System.out.println("进度变化:"+newProgress);
     9 66                 super.onProgressChanged(view, newProgress);
    10 67             }

    用途六:缓存的使用

    优先使用缓存

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

    不使用缓存:

    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
  • 相关阅读:
    select,epoll,poll比较(网络资源总结)
    c++(重载、覆盖、隐藏)
    TCP状态转换图
    TCP心跳 | TCP keepAlive
    回车、换行、空格的ASCII码值—(附ASCII码表)
    C++ dlopen mini HOWTO 一篇非常好的介绍
    shell十三问
    linux IPC消息队列 的内核限制
    C++ string 类常用函数
    const用法的解惑
  • 原文地址:https://www.cnblogs.com/wangying222/p/5276097.html
Copyright © 2011-2022 走看看