android webview,webview
1.WebvView是android內建的一款webkit高效能內部瀏覽器
2. (1)許可權:<uses-permission android:name="android.permission.INTERNET"/>
(2)如果Html有JavaScript則需要設定: webView.getSettings().setJavaScriptEnabled(true);
(3)如果頁面中有串連,點擊串連希望在Webview中繼續開啟,必需設定webView.setWebViewClient(new WebViewClient());否則會用調用系統的瀏覽器開啟。
new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
}
WebViewClient類的shouldOverrideUrlLoading方法,當開啟一個串連時會調用此方法,url為要開啟的網頁地址.可以在特定的網頁開啟之前,做一些動作,也可以不開啟網頁
3.開啟頁面的方式
(1)開啟互連網頁面
webView.loadUrl(“http://www.google.com“); //get形式
webView.postUrl(url,EncodingUtils.getBytes(postData,"UTF-8")); //Post形式.url網址,postData參數:值
(2)開啟本地檔案
myWebView.loadUrl(“file:///android_asset/XX.html“)
檔案存放在assets目錄裡,以file:///android_asset/開頭,xx.html是檔案名稱
(3)直接載入html字串
myWebView.loadData(htmlString, "text/html", "utf-8");
4.後退與前進
按返回鍵時,如果不做任何處理,則會退出整個Browser,如果要返回到上一頁使用webView.goBack();前進使用webView.goForward();如果達到曆史頂端執行這兩個動作則不會執行任何動作,所以在執行之前先進行判斷:webView.canGoBack()和webView.canGoForward()。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()){
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
5.WebView與javascript互動
(1)javascript訪問java代碼
java代碼: webView.addJavascriptInterface(new Object(){
public void onBack(){
}
},"test");
javascript: <a onClick="window.test.onBack ()">。
通過addJavascriptInterface(Object,String)方法
test是暴露給JS的介面名,對應Object對象執行個體,javascript通過window.test.onBack ()調用Object的onBack()方法。
當調用Object時,會另起一個線程
(2)java訪問javascript
mWebView.loadUrl("javascript:test('aa')"); 其中test是javascript的方法
可在test函數裡將資料alert,然後webview中重寫WebChromeClient的onJsAlert函數,具體代碼如下
[java] view plaincopy
wv.setWebChromeClient(new MyWebChromeClient());
final class MyWebChromeClient extends WebChromeClient{
@Override
public booleanonJsAlert(WebView view, String url, String message, final JsResult result) {
//message就是test函數裡alert的字串,這樣你就可以在android用戶端裡對這個資料進行處理
result.confirm();
}
return true;
}
6自訂一個帶進度條的WebView
public class ProgressWebview extends WebView{
private ProgressBar progressBar;
public ProgressWebview(Context context, AttributeSet attrs) {
super(context, attrs);
progressBar = new ProgressBar(context, null,android.R.attr.progressBarStyleHorizontal);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,4,0,0));
addView(progressBar);
setWebChromeClient(new WebChrmoeClient());
}
/*
* 顯示進度條
*/
public class WebChrmoeClient extends WebChromeClient{
@Override
public void onProgressChanged(WebView view, int newProgress) {
if(newProgress==100){
progressBar.setVisibility(View.GONE);
}else {
if(progressBar.getVisibility() == GONE){
progressBar.setVisibility(View.VISIBLE);
}
progressBar.setProgress(newProgress);
}
super.onProgressChanged(view, newProgress);
}
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
// TODO Auto-generated method stub
return super.onJsAlert(view, url, message, result);
}
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
// TODO Auto-generated method stub
LayoutParams params = (LayoutParams) progressBar.getLayoutParams();
params.x = l;
params.y = t;
progressBar.setLayoutParams(params);
super.onScrollChanged(l, t, oldl, oldt);
}
}