package com.example.admin.test_0309_1;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private String url="http://www.baidu.com";
private WebView webView;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
Uri uri=Uri.parse(url);
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
*/
init();
}
private void init() {
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("http://www.hao123.com");
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//爲true的的時候就在webview中打開
view.loadUrl(url);
return true;
}
});
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
//網頁加載完畢
closeDialog();
} else {
//網頁正在加載
openDialog(newProgress);
}
super.onProgressChanged(view, newProgress);
}
private void closeDialog() {
if (progressDialog != null) {
progressDialog.dismiss();
progressDialog = null;
}
}
private void openDialog(int newProgress) {
if (progressDialog == null) {
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("正在加載");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setProgress(newProgress);
progressDialog.show();
} else {
progressDialog.setProgress(newProgress);
}
}
});
}
//改寫物理按鍵--返回的邏輯
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
//Toast.makeText(this,webView.getUrl(),Toast.LENGTH_SHORT).show();
if(webView.canGoBack()){
webView.goBack();
return true;
}else{
System.exit(0);
}
}
return super.onKeyDown(keyCode, event);
}
}
當然佈局中已經把webView加入了佈局中 這裏運行webView必須得先在Androidmanifest里加入入網許可如下:
<uses-permission android:name="android.permission.INTERNET"/>然後就設置webView就可以了
這裏記錄一下幾個重要的設置
/* Uri uri=Uri.parse(url); Intent intent=new Intent(Intent.ACTION_VIEW,uri); startActivity(intent); */url爲設置好的超鏈接字符串 上面是可以用intent方式來打開 當然 這個方法會默認使用系統中自帶的瀏覽器或者第三方瀏覽器來打開網頁
所以爲了讓webView打開網頁就涉及一個方法 覆蓋系統中的瀏覽器用控件自己打開 方法如下
webView = (WebView) findViewById(R.id.webView); webView.loadUrl("http://www.hao123.com"); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //爲true的的時候就在webview中打開 view.loadUrl(url); return true; } });
WebViewClient中的 shoulidOverrideUrlLoading方法 返回true即爲使用控件打開 false相反
這裏可以看到在方法中 有view.loadUrl(url) 這裏的url並不是我一開始設置的url字符串 而是方法中的參數 他的數值應該是前面載入的 hao123
然後是set方法設置JS屬性
WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true);
通過WebSetting方法來攝製JavaScript的載入 這裏選擇爲true
此時的網頁載入進去之後就會發現不管你打開多少的網頁 只要你點擊啊的back就會直接退出程序 所以這裏需要重寫在webview中back按鍵的響應
方法onKeyDown
public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ //Toast.makeText(this,webView.getUrl(),Toast.LENGTH_SHORT).show(); if(webView.canGoBack()){ webView.goBack(); return true; }else{ System.exit(0); } } return super.onKeyDown(keyCode, event); }
語言描述一下 如果按鍵是返回鍵
如果網頁可以返回
那麼返回
方法返回值 true
否則結束程序
最後的返回語句別刪了
現在的網頁就基本完成了 但是美中不足需要在其中加入一個進度條 這樣可以在等待頁面的時候顯得不那麼傻
所以有以下的方法
setWebChromeClient
webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { //網頁加載完畢 closeDialog(); } else { //網頁正在加載 openDialog(newProgress); } super.onProgressChanged(view, newProgress); } private void closeDialog() { if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } } private void openDialog(int newProgress) { if (progressDialog == null) { progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setTitle("正在加載"); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgress(newProgress); progressDialog.show(); } else { progressDialog.setProgress(newProgress); } } });添加方法後 進行設置 如果newProgress ==100 即是 如果進度條滿了 那麼 關閉進度條 當然這裏的進度條是自己在前面要添加的 前面有學過 ProgressDialog
不爲100就打開進度條
然後設置進度條打開關閉的方法
當然 打開肯定是先有的
檔進度條==null 不存在時候 添加一個新的進度條 在當前界面 設置標題正在加載 設置風格 設置加入setWebChromeClient中的newProgress 然後show出來 否則直接加入newProgress
然後就是關閉的方法 如果不是空 就關閉咯
最後是webView運行模式 是否使用本地緩存
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);同樣是webSetting中的一個方法 setCacheMode
完畢