多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 小豬的Android入門之路 Day 8 part 5

小豬的Android入門之路 Day 8 part 5

來源:程序員人生   發布時間:2014-09-29 20:22:34 閱讀次數:2214次

小豬的Android入門之路 Day 8 part 5

Android網絡編程淺析――WebView瀏覽器編程初涉

――轉載請注明出處:coder-pig



本節引言:



不知不覺Android網絡編程淺析也快接近尾聲了,在這part中我們學習了很多關于android

在網絡方面的編程,現在我們來回顧一下吧!大笑

part 1:xml文件的簡單了解:以及android中解析xml文件的一些常用方式:sax,dom,pull解析xml

part 2:Android訪問網絡資源:HTML協議,獲取圖片,獲取網頁代碼,解析服務器返回的xml數據,

          解析服務器返回的JSON數據

part 3:Android網絡數據的下載:J2SE單線程下載文件,J2SE普通多線程下載文件

          Android多線程斷點下載

part 4:Android網絡數據的上傳:GET或POST方式上傳數據;開源框架HttpClient上傳數據;

          發送xml數據給服務;通過Http協議上傳文件;WebService平臺的了解以及簡單應用

而在Part 5中為大家講解的是Android中提供的一個組件:WebView(網絡視圖)的講解,相比起前面

的內容來說,就容易很多了,那么,就跟隨筆者的腳步來學習WebView的使用吧!



本節學習路線圖:

筆者要上課,上完回去發哈大笑





正文:

什么是WebView?




怎么用WebView?


①直接在Activity中調用WebView:



詳細代碼如下:

package com.jay.example.webviewdemo1; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { private WebView wView; @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); wView = new WebView(this); //①實例化WebView對象 wView.setWebViewClient(new WebViewClient() //②設置在webView點擊打開的新網頁在當前界面顯示,而不跳轉到新的瀏覽器中 { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); wView.getSettings().setJavaScriptEnabled(true); //③設置WebView屬性,運行執行js腳本 wView.loadUrl("http://www.baidu.com/"); //④調用loadView方法為WebView加入鏈接 setContentView(wView); //⑤調用Activity提供的setContentView將webView顯示出來 } //⑥另外還需要重寫回退按鈕的方法,不然,當我們在WebView中點擊多個頁面后,一按回退就退出程序了的 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && wView.canGoBack()) { wView.goBack(); //goBack()表示返回WebView的上一頁面 return true; } return false; } }

效果圖:






②在布局代碼中設置WebView


這個其實和在Activity中直接設置的差別不大,代碼都差不多;

另外在第一個代碼中并沒有深入的對回退按鈕的點擊事件只是

設置了webView的回退,相信細心的讀者已經發現,這個程序無論你怎么

按都是退出不了程序的,哈哈!大笑所以在demo2中給出處理方案;

當webView不能再回退,再設置點擊兩次后退出app,詳情見代碼


布局代碼:activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.jay.example.webviewdemo2.MainActivity" > <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editurl" android:hint="請輸入要訪問的Url" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnload" android:text="瀏覽" /> <WebView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/webview" /> </LinearLayout>


MainActivity.java

package com.jay.example.webviewdemo2; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText editurl; private Button btnload; private WebView webView; private String strurl; //定義一個用來存儲點擊退出按鈕時間的便利 private long exitTime = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editurl = (EditText) findViewById(R.id.editurl); btnload = (Button) findViewById(R.id.btnload); webView = (WebView) findViewById(R.id.webview); //設置WebView屬性,能夠執行Javascript腳本 webView.getSettings().setJavaScriptEnabled(true); //設置Web視圖 webView.setWebViewClient(new MyWebViewClient()); btnload.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { strurl = editurl.getText().toString(); //如果用戶輸入的url不帶有http://是找不到網頁的哦! if(!strurl.startsWith("http://")) { strurl = "http://" + strurl; } webView.loadUrl(strurl); } }); } //當我們在webView上打開多個網頁后,我們會習慣性地按回退鍵 //這個時候我們需要重寫回退鍵按鈕,當點擊后調用的是WebView的goBack方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { if(System.currentTimeMillis() - exitTime > 2000) { if(webView.canGoBack()) { webView.goBack(); } else { Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } } else { System.exit(0); } } return false; } //Web視圖,繼承WebViewClient,重寫shouldOverrideUrlLoading方法 //這樣做的話可以避免我們點擊了WebView中某個鏈接,繼續在該WebView窗口上打開網頁 //而不是開啟手機自身的broswer來打開鏈接 class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } }

效果圖:






WebView常用的相關方法:


WebView常用方法:

getSettings()
返回一個WebSettings對象,用來控制WebView的屬性設置
loadUrl(String url)
加載指定的Url
loadData(String data,String mimeType,String encoding)
 加載指定的Data到WebView中.使用"data:"作為標記頭,
改方法不能加載網絡數據.其中mimeType為數據類型如:textml,image/jpeg. 
encoding為字符的編碼方式 
setWebViewClient(WebViewClient client)
為WebView指定一個WebViewClient對象.WebViewClient可
以輔助WebView處理各種通知,請求等事件。
setWebChromeClient(WebChromeClient client)
為WebView指定一個WebChromeClient對象,WebChromeClient專門用來輔助WebView處理js的對話框,網站title,網站圖標,加載進度條等









WebSettings的常用方法:

setJavaScriptEnabled(boolean flag)
設置是否支持JavaScript
setDefaultFontSize(int size)
設置默認的字體大小
setDefaultTextEncodingName(String encoding)
設置默認字符的編碼方式
setAllowFileAccess(boolean allow):
設置是否允許訪問文件數據
setDatabaseEnabled(boolean flag)
設置是否可以使用數據庫相關的api
setDatabasePath(String databasePath) 若使用數據庫API,該方法指定數據庫文件的路徑
setBlockNetworkImage(boolean flag) 設置是否禁止顯示圖片,true表示禁止圖片
setSavePassword(boolean save) 設置是否保存密碼
setTextize(WebSetting.TextSize) 設置頁面文字大小
setSupportZoom(bollean support) 設置是否支持變焦












WebViewClient的常用方法


onPageStared(WebView view,String url) 通知主程序網頁開始加載
onPageFinished(WebView view,String url,Bitmap favicon)
通知主程序,網頁加載完畢
doUpdateVisitedHistory(WebView view,String url,boolean isReload)
更新歷史記錄
onLoadResource(WebView view,String url)
通知主程序WebView即將加載指定url的資源
onScaleChanged(WebView view,float oldScale,float newScale)
ViewView的縮放發生改變時調用
shouldOverrideKeyEvent(WebView view,KeyEvent event) 控制webView是否處理按鍵時間,如果返回true
則WebView不處理,返回false則處理
shouldOverrideUrlLoading(WebView view,String url) 控制對新加載的Url的處理,返回true,說明主程序處理
WebView不做處理,返回false意味著WebView會
對其進行處理
onReceivedError(WebView view,int errorCode,String description,
String failingUrl)
遇到不可恢復的錯誤信息時調用














WebChromeClient的常用方法


onJsAlert(WebView view,String url,String message,JsResult result) 處理Js中的Alert對話框  
onJsConfirm(WebView view,String url,String message,JsResult result)
處理Js中的Confirm對話框
onJsPrompt(WebView view,String url,String message
String defaultValue,,JsPromptResult result)

處理Js中的Prompt對話框
onProgressChanged(WebView view,int newProgress)
當加載進度條發生改變時調用











使用WebView中的js調用Android方法:


在開始講解這里之前,相信大家都知道webView是一個類似于瀏覽器的組件了,他就是用來加載網頁的;

但是它真的只有加載網頁那么簡單么?答案肯定是否定的;首先大家都知道HTML是拿來做靜態網站的吧

但是Android的界面開發可以采用HTML網頁技術,相比起我們用Layout技術慢慢布局顯得更加方便,快捷

當然,屏幕適配是需要解決的問題;另外在我們的HTML中需要獲取Android設備的相關信息時,比如獲取設備

所在的經緯度(定位),或者讀取聯系人,打電話,發送信息等的!而實現互訪的原理如下:

html――js――java,就是說以js為媒介,只需要傳遞JSon類型的數據即可!


注意:為了節省篇幅.以下代碼使用的html文件都是放到assets目錄下的,訪問時

直接用loadUrl("file:///android_asset/~")即可



代碼示例:

①html通過js顯示Toast與普通列表的對話框

效果圖:



核心代碼:

自定義一個Object對象,js通過該類暴露的方法來調用Android

MyObject.java:

package com.jay.example.webviewdemo3; import android.app.AlertDialog; import android.content.Context; import android.widget.Toast; public class MyObject { Context context; public MyObject(Context context) { this.context = context; } //將顯示Toast和對話框的方法暴露給JS腳本調用 public void showToast(String name) { Toast.makeText(context, name, Toast.LENGTH_SHORT).show(); } public void showDialog() { new AlertDialog.Builder(context) .setTitle("聯系人列表").setIcon(R.drawable.ic_launcher) .setItems(new String[]{"小王","小壞","小豬","小狗","小貓"}, null) .setPositiveButton("確定", null).create().show(); } }

創建一個html文件,內容如下,接著把它放到工程的assets目錄下:

my.html

<!DOCTYPE html> <html> <head> <title>Js調用Android</title> </head> <body> <input type="button" value="Toast提示" onclick="myObj.showToast('逗比');"/> <input type="button" value="列表對話框" onclick="myObj.showDialog();"/> </body> </html>

在MainActivity中完成WebView的初始化,設置運行調用js,最后通過addJavascriptIntefcae()將

對象暴露給Js,js就可以通過該對象操作與Android相關的操作了

package com.jay.example.webviewdemo3; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; public class MainActivity extends Activity { private WebView webView; @SuppressLint("JavascriptInterface") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webView); webView.loadUrl("file:///android_asset/my.html"); WebSettings webSettings = webView.getSettings(); //①設置WebView允許調用js webSettings.setJavaScriptEnabled(true); webSettings.setDefaultTextEncodingName("UTF-8"); //②將object對象暴露給Js,調用addjavascriptInterface webView.addJavascriptInterface(new MyObject(MainActivity.this), "myObj"); } }
ps:上述代碼在4.2及以上的虛擬機上都是運行后都是沒有點擊效果的,

筆者也不知道為什么,但是在真機上都是可以的!




②HTML通過js調用三種不同的對話框

效果圖:


核心代碼:


創建一個html文件,然后把它放到工程的assets目錄下:

my.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv = "Content-Type" content="text/html;charset=UTF-8" <title>測試Js的三種不同對話框</title> <script language="JavaScript"> function alertFun() { alert("Alert警告對話框!"); } function confirmFun() { if(confirm("訪問百度?")) {location.href = "http://www.baidu.com";} else alert("取消訪問!"); } funct
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: free中国性xxxxhd | 日本特黄特黄刺激大片免费 | 伊人久久大香线焦在观看 | 涩涩五月天婷婷丁香综合社区 | 在线欧美一级毛片免费观看 | 欧美一区二区三区gg高清影视 | 国产精品久久久久久久久免费观看 | 欧美zzzz| 羞羞视频在线 | 日本一区二区三区欧美在线观看 | free性欧美hd另类 | 久久国产精品免费视频 | 最近中文字幕免费版在线 | 亚洲第成色999久久网站 | 日本香蕉一区二区三区 | 亚洲国产精品久久久久久 | 亚洲性另类 | 99精品日韩 | 欧美亚洲综合网 | 91福利一区二区在线观看 | 午夜视频在线观看免费观看在线观看 | 久久不卡免费视频 | 亚洲国产欧美久久香综合 | 美国伊人 | 国产一区二区三区樱花动漫 | 精品1州区2区3区4区产品乱码 | 日本孕妇大胆孕交无码 | 欧美亚洲综合网 | 激情春色网 | 国产精品亚洲国产三区 | 九色九色九色在线综合888 | 手机在线日韩高清理论片 | 校园春色另类 | 欧美又粗又硬又黄又爽视频 | 国产亚洲免费观看 | 国产福利在线 | 成人国产一区二区 | 日本高清在线观看视频www | 欧美精品久久久久久久免费观看 | 亚洲福利三区 | 亚洲三级在线视频 |