WebView显示网页
标签(空格分隔): WebView Android
1.使用WebView加载页面
loadUrl()
web资源:
webView.loadUrl("http://www.baidu.com");
本地文件:
webView.loadUrl("file///android_asset/XX.html");
本地文件存放在:assets文件中
//使页面获得焦点
webView.requestFocus();
在访问网络前,需要在配置文件中获取INTERNET权限
<manifest...>
<uses-permission android:name="android:permission.INTERNET"/>
...
</manifest>
WebViewActivity.java
package com.excavator.webviewdemo;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
public class WebViewActivity extends Activity {
private static final String url = "http://www.imooc.com/course/list";
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
/*Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);*/
init();
}
private void init() {
mWebView = (WebView) findViewById(R.id.webView);
//加载本地资源 在java和res平行目录下新建assets文件夹(即在src/main目录下新建assets)
// mWebView.loadUrl("file:///android_asset/example.html");
//加载web资源
mWebView.loadUrl("http://www.baidu.com");
}
}
2. 处理页面导航
当用户点击一个WebView中的页面的链接时,通常,是由默认的浏览器打开并加载目标URL。然而,你可以在WebView中覆盖这一行为,那么链接就会在WebView中打开。
//覆盖WebView默认通过第三方或者系统浏览器打开网页,使得网页可以在WebView中打开
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//返回值是true控制网页在WebView中打开,如果为false调用系统或第三方浏览器打开
view.loadUrl(url);
return true;
}
//WebViewClient帮助页面处理一些页面控制和请求通知
});
3. 在WebView中使用Javascript
如果想在WebView中的web页面使用JavaScript,需要在WebView中启用JavaScript。启用JavaScript可以通过WebView中带有WebSettings来启用它。可以通过getSettings()方法来获取WebSettings的值,然后通过setJavaScriptEnabled()来启用JavaScript。
//启用支持JavaScript
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
4. WebView后退与前进
当WebView覆盖了URL加载,它会自动生成历史访问记录。可以通过goBack()或goForward()向前或向后刚问已访问过的站点。
//改写物理按键返回逻辑
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_BACK){
Toast.makeText(this,mWebView.getUrl(),Toast.LENGTH_SHORT).show();
if (mWebView.canGoBack()){
//返回上一界面
mWebView.goBack();
return true;
}else {
//退出程序
System.exit(0);
}
}
return super.onKeyDown(keyCode, event);
}
5. 判断页面加载过程
由于有些界面加载缓慢,我们为需要去判断加载过程,制作进度条给予用户良好的体验。
//判断页面加载进度
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
//newProgress 1-100之间的整数
if (newProgress==100) {
//网页加载完毕,关闭ProgressDialog
closeDialog();
}else {
//网页正在加载,打开ProgressDialog
openDialog(newProgress);
}
}
private void openDialog(int newProgress) {
if (mProgressDialog==null) {
mProgressDialog = new ProgressDialog(WebViewActivity.this);
mProgressDialog.setTitle("正在加载");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setProgress(newProgress);
mProgressDialog.show();
}else {
mProgressDialog.setProgress(newProgress);
}
}
private void closeDialog() {
if (mProgressDialog!=null&&mProgressDialog.isShowing()){
mProgressDialog.dismiss();
mProgressDialog = null;
}
}
});
6. WebView缓存的使用
优先使用缓存:
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
不使用缓存:
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);