我要做的一個(gè)東西是在一個(gè)頁(yè)面的中間嵌入瀏覽器,一開(kāi)始不知道從哪里開(kāi)始,因?yàn)橐郧坝玫亩际荰extveiw或者editVeiw之類(lèi)的控件,而它們并不能用來(lái)顯示網(wǎng)頁(yè)的內(nèi)容,怎么辦呢?
首先想到的是:是不是有一個(gè)用來(lái)顯示網(wǎng)頁(yè)的View呢,于是我就在eclipse里xml編輯器里輸入<web,哈哈,果然下面有個(gè)提示是webVeiw,那么能不能用它呢?于是到網(wǎng)上搜一下它的資料,果然可以的,下面就開(kāi)始吧。
先在xml里把webview建好,在代碼里用findViewById()將其取出來(lái)。我的代碼是:
WebView webView = (WebView)this.findViewById("@/id/webview");
緊接著就用到了從網(wǎng)上找的內(nèi)容了,慢慢看吧。
如何創(chuàng)建WebView:
1、添加權(quán)限:AndroidManifest.xml中必須使用許可"android.permission.INTERNET",否則會(huì)出Web page not available錯(cuò)誤。
2、在要Activity中生成一個(gè)WebView組件:WebView webView = new WebView(this);
3、設(shè)置WebView基本信息:
如果訪問(wèn)的頁(yè)面中有Javascript,則webview必須設(shè)置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
觸摸焦點(diǎn)起作用
requestFocus();//如果不設(shè)置,則在點(diǎn)擊網(wǎng)頁(yè)文本輸入框時(shí),不能彈出軟鍵盤(pán)及不響應(yīng)其他的一些事件。
取消滾動(dòng)條
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4、設(shè)置WevView要顯示的網(wǎng)頁(yè):
互聯(lián)網(wǎng)用:webView.loadUrl(" 本地文件用:webView.loadUrl(" 5、如果希望點(diǎn)擊鏈接由自己處理,而不是新開(kāi)Android的系統(tǒng)browser中響應(yīng)該鏈接。
給WebView添加一個(gè)事件監(jiān)聽(tīng)對(duì)象(WebViewClient)
并重寫(xiě)其中的一些方法
shouldOverrideUrlLoading:對(duì)網(wǎng)頁(yè)中超鏈接按鈕的響應(yīng)。
當(dāng)按下某個(gè)連接時(shí)WebViewClient會(huì)調(diào)用這個(gè)方法,并傳遞參數(shù):按下的url
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest
6、如果用webview點(diǎn)鏈接看了很多頁(yè)以后,如果不做任何處理,點(diǎn)擊系統(tǒng)“Back”鍵,整個(gè)瀏覽器會(huì)調(diào)用finish()而結(jié)束自身,如果希望瀏覽的網(wǎng)頁(yè)回退而不是退出瀏覽器,需要在當(dāng)前Activity中處理并消費(fèi)掉該Back事件。
覆蓋Activity類(lèi)的onKeyDown(int keyCoder,KeyEvent event)方法。
public boolean onKeyDown(int keyCoder,KeyEvent event){
if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){
webview.goBack(); //goBack()表示返回webView的上一頁(yè)面
return true;
}
return false;
}
WebView相關(guān)問(wèn)題注意:
Android的webView很強(qiáng)大,其實(shí)就是一個(gè)瀏覽器,你可以把它嵌入到你想要的位置,我這里遇到兩個(gè)問(wèn)題,就是怎么知道網(wǎng)頁(yè)的加載進(jìn)度和加載網(wǎng)頁(yè)時(shí),
點(diǎn)擊網(wǎng)頁(yè)里面的鏈接還是在當(dāng)前的webview里跳轉(zhuǎn),不想跳到瀏覽器那邊,解決辦法如下:
//此方法可以處理webview 在加載時(shí)和加載完成時(shí)一些操作
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
if(newProgress==100){ // 這里是設(shè)置activity的標(biāo)題, 也可以根據(jù)自己的需求做一些其他的操作
title.setText("加載完成");
}else{
title.setText("加載中.......");
}
}
});
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { //重寫(xiě)此方法表明點(diǎn)擊網(wǎng)頁(yè)里面的鏈接還是在當(dāng)前的webview里跳轉(zhuǎn),不跳到瀏覽器那邊
view.loadUrl(url);
return true;
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) { // 重寫(xiě)此方法可以讓webview處理https請(qǐng)求
handler.proceed();
}
});
下面的一篇文章是如何在WebView里面加入進(jìn)度步的方法,大家可以參考。
聯(lián)系客服