好久沒有更新了!今天我們來學習WebView控件。廢話不多說,先看下我的運行結果吧!





接下來看下如何實現代碼邏輯!
第一步:在主布局中寫
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView"
/>

第二步:對主JAVA代碼進行編寫
public class MainActivity extends AppCompatActivity {
//定義控件
private WebView webView;
private ProgressDialog pDialog
;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//加載布局
init();//方法調用
}
private void init() {
//尋找控件的ID
webView= (WebView) findViewById(R.id.webView);
//webView加載web資源,打開方式是默認的瀏覽器
webView.loadUrl("http://www.imooc.com/course/programdetail/pid/33");
//覆蓋WebView默認通過第三方或者是系統瀏覽器打開的行為,使得網頁可以在WebView中打開
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
//返回值為true的時候控制網頁在WebView中打開,為false時調用系統瀏覽器呀第三方瀏覽器
return false;
}
});
//啟用支持JavaScript
WebSettings settings=webView.getSettings();
settings.setJavaScriptEnabled(true);
//WebView加載頁面優先使用緩存加載
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//頁面加載的進度
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
//newProgress為1~100之間的整數
if(newProgress==100){
//網頁加載完畢,關閉ProgressDialog
closeDialog();
}else{
//網頁正在加載,打開ProgressDialog
openDialog(newProgress);
}
}
private void closeDialog() {
//進度條不為空並且顯示有進度條時
if(pDialog!=null&&pDialog.isShowing()){
pDialog.dismiss();//進度條取消顯示
pDialog=null;//並且進度條設置為空
}
}
private void openDialog(int newProgress) {
//進度條為空時
if (pDialog==null){
pDialog=new ProgressDialog(MainActivity.this);
pDialog.setTitle("正在加載...");
//進度條的樣式
pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pDialog.setProgress(newProgress);//顯示進度條的進度
pDialog.show();//顯示進度條
}else {
pDialog.setProgress(newProgress);//顯示最新(刷新)的進度
}
}
});
}
//改寫物理按鍵--返回的邏輯
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
if (webView.canGoBack()){
webView.goBack();//返回上一頁面
return true;
}else{
System.exit(0);//退出
}
}
return super.onKeyDown(keyCode, event);
}
}
哼哼,是不是感覺太多了雖然有備注可是還是覺得看不懂!沒事沒事!下面我們來看下如何一步一步的完成成這個Demon
1.對控件進行實例化
private WebView webView;
private ProgressDialog pDialog;
webView= (WebView) findViewById(R.id.webView);
2.來進行網頁的加載!這里有兩種加載方式
1)是在你的手機默認的瀏覽器中打開
2)還有一個是通過第三方的瀏覽器來打開
//webView加載web資源,打開方式是默認的瀏覽器
webView.loadUrl("http://www.imooc.com/course/programdetail/pid/33");
//覆蓋WebView默認通過第三方或者是系統瀏覽器打開的行為,使得網頁可以在WebView中打開
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
//返回值為true的時候控制網頁在WebView中打開,為false時調用系統瀏覽器呀第三方瀏覽器
return false;
}
});
溫馨提示:如果要訪問網絡,需在配置清單中加載權限
<uses-permission android:name="android.permission.INTERNET"/>
做完以上步驟之后來進行運行一下!它是可以實現的

當你點擊按鈕時會進入到另一個界面!但當你按返回時它會直接退出程序界面!!!

此時想一想這是為什么呢?下面來看下我們的實現方式!
//改寫物理按鍵--返回的邏輯
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
if (webView.canGoBack()){
webView.goBack();//返回上一頁面
return true;
}else{
System.exit(0);//退出
}
}
return super.onKeyDown(keyCode, event);
}
加入這個代碼之后再運行一下!再當你按返回鍵時它就可以返回到上一頁了!!!
4.好了!實現以上功能之后再來看看如何實現對話框的!就是ProgressDialog
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
//newProgress為1~100之間的整數
if(newProgress==100){
//網頁加載完畢,關閉ProgressDialog
closeDialog();//調用該方法
}else{
//網頁正在加載,打開ProgressDialog
openDialog(newProgress);
}
}
private void closeDialog() {
//進度條不為空並且顯示有進度條時
if(pDialog!=null&&pDialog.isShowing()){
pDialog.dismiss();//進度條取消顯示
pDialog=null;//並且進度條設置為空
}
}
private void openDialog(int newProgress) {
//進度條為空時
if (pDialog==null){
pDialog=new ProgressDialog(MainActivity.this);
pDialog.setTitle("正在加載...");
//進度條的樣式
pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pDialog.setProgress(newProgress);//顯示進度條的進度
pDialog.show();//顯示進度條
}else {
pDialog.setProgress(newProgress);//顯示最新(刷新)的進度
}
}
});
}
寫完之后再來運行一下,按返回鍵時便會有Dialog!那么問題來了!運行時雖然有Dialog但你運行時有沒有發現出現的Dialog它沒有一個過程就跳到另一個界面來所以下面我們來實現該功能
//啟用支持JavaScript
WebSettings settings=webView.getSettings();
settings.setJavaScriptEnabled(true);
//WebView加載頁面優先使用緩存加載
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//頁面加載的進度
就是說對Dialog來寫一個緩存機制!再來運行一下就會出現和我一樣的效果圖了...好了!到這里你學會WebView的使用了嗎?
如果覺得對你有幫助的話給個贊唄!