<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Android WebView基本使用

      轉載請注明出處:

      http://blog.csdn.net/lowprofile_coding/article/details/77928614
      

      WebView介紹

      Android WebView在Android平臺上是一個特殊的View, 基于webkit引擎、展現web頁面的控件,這個類可以被用來在你的app中僅僅顯示一張在線的網頁,還可以用來開發瀏覽器。WebView內部實現是采用渲染引擎來展示view的內容,提供網頁前進后退,網頁放大,縮小,搜索。Android的Webview在低版本和高版本采用了不同的webkit版本內核,4.4后直接使用了Chrome。

      現在很多APP都內置了Web網頁,比如說很多電商平臺,淘寶、京東、聚劃算等等。WebView比較靈活,不需要升級客戶端,只需要修改網頁代碼即可。一些經常變化的頁面可以用WebView這種方式去加載網頁。例如中秋節跟國慶節打開的頁面不一樣,如果是用WebView顯示的話,只修改修改html頁面就行,而不需要升級客戶端。

      Webview功能強大,可以直接使用html文件(本地sdcard/assets目錄),還可以直接加載url,使用JavaScript可以html跟原生APP互調。

      加載html四種方式

      webView.loadUrl("http://139.196.35.30:8080/OkHttpTest/apppackage/test.html");//加載url
      
      webView.loadUrl("file:///android_asset/test.html");//加載asset文件夾下html
      
      //方式3:加載手機sdcard上的html頁面
      webView.loadUrl("content://com.ansen.webview/sdcard/test.html");
      
      //方式4 使用webview顯示html代碼
      webView.loadDataWithBaseURL(null,"<html><head><title> 歡迎您 </title></head>" +
              "<body><h2>使用webview顯示 html代碼</h2></body></html>", "text/html" , "utf-8", null);
      

      WebViewClient與WebChromeClient區別

      使用WebView基本都會使用這兩個類,那他們有哪些區別呢?

      WebViewClient主要幫助WebView處理各種通知、請求事件的,有以下常用方法:

      • onPageFinished 頁面請求完成
      • onPageStarted 頁面開始加載
      • shouldOverrideUrlLoading 攔截url
      • onReceivedError 訪問錯誤時回調,例如訪問網頁時報錯404,在這個方法回調的時候可以加載錯誤頁面。

      WebChromeClient主要輔助WebView處理Javascript的對話框、網站圖標、網站title、加載進度等,有以下常用方法。

      • onJsAlert webview不支持js的alert彈窗,需要自己監聽然后通過dialog彈窗
      • onReceivedTitle 獲取網頁標題
      • onReceivedIcon 獲取網頁icon
      • onProgressChanged 加載進度回調

      簡單使用

      因為需要加載網頁url,所以需要在AndroidManifest.xml中添加訪問網絡權限。

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

      布局文件:activity_main.xml

      <?xml version="1.0" encoding="utf-8"?>
      <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">
      
          <WebView
              android:id="@+id/webview"
              android:layout_width="match_parent"
              android:layout_height="match_parent"/>
      
          <ProgressBar
              android:id="@+id/progressbar"
              style="@android:style/Widget.ProgressBar.Horizontal"
              android:layout_width="match_parent"
              android:layout_height="3dip"
              android:max="100"
              android:progress="0"
              android:visibility="gone"/>
      </FrameLayout>
      

      外層FrameLayout,里面有WebView跟ProgressBar,WebView的寬高匹配父類,ProgressBar橫向進度條,高度3dip,按照FrameLayout布局規則,ProgressBar會覆蓋在WebView之上,默認是隱藏不顯示。

      MainActivity.java

      public class MainActivity extends AppCompatActivity {
          private WebView webView;
          private ProgressBar progressBar;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              progressBar= (ProgressBar)findViewById(R.id.progressbar);//進度條
      
              webView = (WebView) findViewById(R.id.webview);
      //        webView.loadUrl("file:///android_asset/test.html");//加載asset文件夾下html
              webView.loadUrl("http://139.196.35.30:8080/OkHttpTest/apppackage/test.html");//加載url
      
              //使用webview顯示html代碼
      //        webView.loadDataWithBaseURL(null,"<html><head><title> 歡迎您 </title></head>" +
      //                "<body><h2>使用webview顯示 html代碼</h2></body></html>", "text/html" , "utf-8", null);
      
              webView.addJavascriptInterface(this,"android");//添加js監聽 這樣html就能調用客戶端
              webView.setWebChromeClient(webChromeClient);
              webView.setWebViewClient(webViewClient);
      
              WebSettings webSettings=webView.getSettings();
              webSettings.setJavaScriptEnabled(true);//允許使用js
      
              /**
               * LOAD_CACHE_ONLY: 不使用網絡,只讀取本地緩存數據
               * LOAD_DEFAULT: (默認)根據cache-control決定是否從網絡上取數據。
               * LOAD_NO_CACHE: 不使用緩存,只從網絡獲取數據.
               * LOAD_CACHE_ELSE_NETWORK,只要本地有,無論是否過期,或者no-cache,都使用緩存中的數據。
               */
              webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用緩存,只從網絡獲取數據.
      
              //支持屏幕縮放
              webSettings.setSupportZoom(true);
              webSettings.setBuiltInZoomControls(true);
      
              //不顯示webview縮放按鈕
      //        webSettings.setDisplayZoomControls(false);
          }
      
          //WebViewClient主要幫助WebView處理各種通知、請求事件
          private WebViewClient webViewClient=new WebViewClient(){
              @Override
              public void onPageFinished(WebView view, String url) {//頁面加載完成
                  progressBar.setVisibility(View.GONE);
              }
      
              @Override
              public void onPageStarted(WebView view, String url, Bitmap favicon) {//頁面開始加載
                  progressBar.setVisibility(View.VISIBLE);
              }
      
              @Override
              public boolean shouldOverrideUrlLoading(WebView view, String url) {
                  Log.i("ansen","攔截url:"+url);
                  if(url.equals("http://www.google.com/")){
                      Toast.makeText(MainActivity.this,"國內不能訪問google,攔截該url",Toast.LENGTH_LONG).show();
                      return true;//表示我已經處理過了
                  }
                  return super.shouldOverrideUrlLoading(view, url);
              }
      
          };
      
          //WebChromeClient主要輔助WebView處理Javascript的對話框、網站圖標、網站title、加載進度等
          private WebChromeClient webChromeClient=new WebChromeClient(){
              //不支持js的alert彈窗,需要自己監聽然后通過dialog彈窗
              @Override
              public boolean onJsAlert(WebView webView, String url, String message, JsResult result) {
                  AlertDialog.Builder localBuilder = new AlertDialog.Builder(webView.getContext());
                  localBuilder.setMessage(message).setPositiveButton("確定",null);
                  localBuilder.setCancelable(false);
                  localBuilder.create().show();
      
                  //注意:
                  //必須要這一句代碼:result.confirm()表示:
                  //處理結果為確定狀態同時喚醒WebCore線程
                  //否則不能繼續點擊按鈕
                  result.confirm();
                  return true;
              }
      
              //獲取網頁標題
              @Override
              public void onReceivedTitle(WebView view, String title) {
                  super.onReceivedTitle(view, title);
                  Log.i("ansen","網頁標題:"+title);
              }
      
              //加載進度回調
              @Override
              public void onProgressChanged(WebView view, int newProgress) {
                  progressBar.setProgress(newProgress);
              }
          };
      
          @Override
          public boolean onKeyDown(int keyCode, KeyEvent event) {
              Log.i("ansen","是否有上一個頁面:"+webView.canGoBack());
              if (webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK){//點擊返回按鈕的時候判斷有沒有上一頁
                  webView.goBack(); // goBack()表示返回webView的上一頁面
                  return true;
              }
              return super.onKeyDown(keyCode,event);
          }
      
          /**
           * JS調用android的方法
           * @param str
           * @return
           */
          @JavascriptInterface //仍然必不可少
          public void  getClient(String str){
              Log.i("ansen","html調用客戶端:"+str);
          }
      
          @Override
          protected void onDestroy() {
              super.onDestroy();
      
              //釋放資源
              webView.destroy();
              webView=null;
          }
      }
      
      • onCreate 查找控件,給webView設置加載url,添加js監聽,監聽的名稱是"android",設置webChromeClient跟webViewClient回調,通過getSettings方法獲取WebSettings對象,設置允許加載js,設置緩存模式,支持縮放。
      • webViewClient 重寫了幾個方法,onPageFinished頁面加載完成隱藏進度條,onPageStarted頁面開始加載顯示進度條,shouldOverrideUrlLoading攔截url,如果請求url是打開google,不讓他請求,因為google在國內不能訪問,就算請求也請求不到還不如攔截掉,直接告訴用戶不能訪問。
      • webChromeClient onJsAlert()因為WebView不支持alert彈窗,在這個方法中用AlertDialog去彈窗。onReceivedTitle獲取網頁標題。onProgressChanged頁面加載進度,把加載進度給progressBar。
      • onKeyDown 如果點擊系統自帶返回鍵&&webView有上一級頁面,調用goBack返回。否則不處理。什么時候輝有上一級頁面呢?就是你從首頁跳轉到了一個新頁面,點擊返回的時候會返回首頁。如果本來就在首頁點擊返回的時候會退出app。
      • getClient html頁面的JS可以通過這個方法回調原生APP,這個方法有個注解@JavascriptInterface,這個是必須的,這個方法有個字符串參數,這個方法跟我們在onCreate中調用addJavascriptInterface傳入的name一起使用的。例如html中想要回調這個方法可以這樣寫:javascript:android.getClient("傳一個字符串給客戶端");
      • onDestroy activity銷毀時釋放webView資源。

      運行代碼,效果圖如下:
      效果圖

      源碼下載

      如果你想第一時間看我的后期文章,掃碼關注公眾號,每周不定期推送Android開發實戰教程文章...

            Android開發666 - 安卓開發技術分享
                   掃描二維碼加關注
      

      Android開發666

      posted @ 2017-09-11 04:59  安輝  閱讀(2352)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产熟女50岁一区二区| 国产精品www夜色视频| 亚洲国产欧美在线看片一国产| 亚洲区一区二区激情文学| 亚洲国产日韩欧美一区二区三区 | 欧美成人无码a区视频在线观看 | 精品国产中文字幕懂色| 免费人成年激情视频在线观看| 18禁无遮拦无码国产在线播放| 亚洲综合视频一区二区三区| 99精品国产一区二区电影| 国产丝袜视频一区二区三区 | 国产高清自产拍AV在线| 日韩中文字幕高清有码| 国产精品成人午夜久久| 日韩一本不卡一区二区三区| 日韩av无码精品人妻系列| 97成人碰碰久久人人超级碰oo| 欧美性猛交xxxx免费看| 在线日韩日本国产亚洲| 亚洲综合一区国产精品| 无码无需播放器av网站| 婷婷国产亚洲性色av网站| 国产不卡一区二区四区| 欧洲免费一区二区三区视频| 国产精品亚洲二区在线播放| 亚洲av永久无码天堂影院| 国产高清在线男人的天堂| 成人国产av精品免费网| www欧美在线观看| 特级做a爰片毛片免费看无码| 亚洲av成人一区二区| 韩国三级+mp4| 亚洲 日韩 国产 制服 在线| 国产精品一区二区久久岳| 日本少妇被黑人xxxxx| 亚洲精品成a人在线观看| 无遮无挡爽爽免费视频| 极品人妻videosss人妻| 加勒比久久综合网天天| 日韩V欧美V中文在线|