WebView是Android提供的一个显示网页的控件,它使用了WebKit渲染引擎来显示网页,对网页的加载做了高度的优化,在实际开发中也比较常用。
WebView通过webView.loadUrl(Url url)传入一个Url对象来来加载一个网页。所以,我们不仅可以加载外部资源(如“http://www.baidu.com”),也可以加载内部的资源(如"file:///android_asset/index.html",表示加载asset目录下的index.html,“file://android_”是引入内部资源的前缀)
注意:
(1)当加载完一个网页后,如果没有对该网页进行缓存,当再次浏览该网页时,会重新加载,既费时又费流量。这时就需要对网页进行缓存,当再次浏览时会加载缓存中网页,这样显得很快捷。
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
(2)不要忘记在清单文件中注册网络权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
效果预览:
![](https://img-blog.csdn.net/20150914163942712)
1.在布局中创建控件
在主布局文件中添加“WebView”标签对,并设置属性:
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
2.MainActivity类
package com.example.lowp.webview_test;
import android.app.ProgressDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private WebView webView;
private ProgressDialog dialog;
private String mUrl = "http://2014.qq.com/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webview);
webView.loadUrl(mUrl);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
/**
* WebViewClient是一个辅助类,帮助wbeview去处理一些网页的通知和请求
*/
webView.setWebViewClient(new WebViewClient() {
/**
* 当点击一个链接时调用,返回true表示网页在当前webview中处理这个url
* 返回false表示调用系统提供的浏览器中处理
*/
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
Log.i("zxc", "shouldOverrideUrlLoading");
return true;
}
});
/**
* WebChromeClient是一个辅助类,帮助WebView处理Javascript的对话框,网站图标,网站title,加载进度等
*/
webView.setWebChromeClient(new WebChromeClient(){
/**
* 当网页的加载进度发生变化时调用该方法
*/
@Override
public void onProgressChanged(WebView view, int newProgress) {
if(newProgress == 100){
closeDialog();
}else{
openDilog(newProgress);
}
}
});
}
/**
* 网页加载进度对话框
*/
public void openDilog(int newProgress){
if(dialog == null){
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("LOADING......");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(newProgress);
dialog.show();
}else{
dialog.setProgress(newProgress);
}
}
public void closeDialog(){
if(dialog != null && dialog.isShowing()){
dialog.dismiss();
dialog = null;
}
}
/**
* 改写返回键
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == event.KEYCODE_BACK){
if(webView.canGoBack()){
webView.goBack();
Toast.makeText(MainActivity.this,"back!",Toast.LENGTH_SHORT).show();
return true;
}else{
System.exit(0);
}
}
return super.onKeyDown(keyCode, event);
}
}