android-WebView

时间:2021-10-01 21:31:24

使用WebView 加载页面

一、加载页面 使用loadUrl()
  web资源:webView.loadUrl("http://www.baidu.com");
  本地文件用:webView.loadUrl("file://android_asset/xx.html");

  使页面获得焦点:webView.requestFocus();

二、 获取网络访问权限

   <uses-permission android:name="android.permission.INTERNET"/>

三、 在WebView中使用Javascript
     WebSettings 启用
     WebView webView=(WebView)findViewById(R.id.webview);
     getSettings() 获取WebSettings的值
     WebSettings webSettings=webView.getSettings()
     setJavaScriptEnabled() 启用
     Javascript webSettings.setJavaScriptEnabled(true)
四、 处理页面导航

   WebView通常默认浏览器打开并加载目标URL,然而你可以在WebView中覆盖这一行为,如此
   链接就会在WebView中打开。

     webView.setWebViewClient(new WebViewClient())
     WebViewClient:帮助WebView去处理一些页面控制和请求通知
  

五、 后退与前进
   当WebView覆盖URL加载,自动生成历史访问记录;可以通过goBack()或goForward()向后
   向前访问已经访问过的站点

六、 判断页面加载过程

七、 WebView缓存的应用

八、缓存

  优先使用缓存:
     webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
   不适用缓存(默认):
     webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends Activity {

private String url="http://2014.qq.com/";
private WebView webView;
private ProgressDialog pd;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

/*Uri uri=Uri.parse(url);
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);*/
init();
}

private void init() {
// TODO Auto-generated method stub
webView =(WebView) findViewById(R.id.webView);

webView.loadUrl(url);
//webView.loadUrl("file:///android_asset/test1.html");

//覆盖WebView通过第三方或者系统浏览器打开
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// true--在webView中打开 false---通过第三方或者系统浏览器打开
view.loadUrl(url);
return true;
}
});

//启用javascript
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) {
//newProgress:1~100
if(newProgress==100){
//加载完毕,关闭ProgressDialog
closeDialog();
}else{
//正在加载,打开ProgressDialog
openDialog(newProgress);
}
}

private void openDialog(int newProgress) {
// TODO Auto-generated method stub
if(pd==null){
pd=new ProgressDialog(MainActivity.this);
pd.setTitle("正在加载");
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//横向进度条
pd.setProgress(newProgress);
pd.show();
}else{
pd.setProgress(newProgress);
}
}

private void closeDialog() {
// TODO Auto-generated method stub
if(pd!=null&&pd.isShowing()){
pd.dismiss();
}
}
});
}
//改写物理按键一键返回的逻辑
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
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);
}
}