package com.applite.webviewdemo; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.webkit.DownloadListener; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private String url="http://2014.qq.com"; private WebView webView; //刷新按钮 private Button btnRefresh; //后退按钮 private Button btnBack; //webview的url地址 private TextView webUrl; //错误码展示 private TextView tv_webview_error; //进度dialog private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview); /* Uri uri=Uri.parse(url); Intent intent=new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); */ init(); } //改写手机物理按键的返回逻辑 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { System.out.println(keyCode); System.out.println(KeyEvent.KEYCODE_BACK); //返回键+判断webview是否能够返回 if(keyCode==KeyEvent.KEYCODE_BACK) { Toast.makeText(this, webView.getUrl(), Toast.LENGTH_SHORT).show(); System.out.println(webView.canGoBack()); if(webView.canGoBack()) { webView.goBack(); //注意这一行 return true; } } else { //退出程序 System.exit(0); } return super.onKeyDown(keyCode, event); } //后退和刷新 class WebViewListener implements View.OnClickListener { @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_refresh: webView.reload(); break; case R.id.btn_back: webView.goBack(); break; default: break; } } } //下载文件 class Download implements DownloadListener { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { System.out.println("------------->"+url); if(url.endsWith(".apk")) { //第一种方式 自定义的 new HttpThread(url).start(); //通过系统的浏览器下载 Uri uri=Uri.parse(url); Intent intent=new Intent(Intent.ACTION_VIEW,uri); startActivity(intent); } } } private void init(){ btnBack=(Button)findViewById(R.id.btn_back); btnRefresh=(Button)findViewById(R.id.btn_refresh); webUrl=(TextView)findViewById(R.id.tv_webview_url); tv_webview_error=(TextView)findViewById(R.id.tv_webview_error); webView=(WebView)findViewById(R.id.webView); //启用使用javascript WebSettings webSettings=webView.getSettings(); webSettings.setJavaScriptEnabled(true); //webview缓存的使用(优先使用缓存 默认webview不使用缓存) webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); btnBack.setOnClickListener(new WebViewListener()); btnRefresh.setOnClickListener(new WebViewListener()); webView.setDownloadListener(new Download()); //页面加载进度 webView.setWebChromeClient(new WebChromeClient(){ //自定义webview的title @Override public void onReceivedTitle(WebView view, String title) { if(webView.getVisibility()==View.GONE) { tv_webview_error.setVisibility(View.GONE); webView.setVisibility(View.VISIBLE); } webUrl.setText(title); super.onReceivedTitle(view, title); } @Override public void onProgressChanged(WebView view, int newProgress) { //newProgress 范围1-100 if(newProgress==100) { //网页加载完毕 关闭进度条 closeLoadDialog(); } else { //网页正在加载 openLoadDialog(newProgress); } super.onProgressChanged(view, newProgress); } private void openLoadDialog(int newProgress) { // TODO Auto-generated method stub if(progressDialog==null) { progressDialog=new ProgressDialog(MainActivity.this); progressDialog.setTitle("正在加载中..."); //设置为横向的进度条 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgress(newProgress); } else { progressDialog.setProgress(newProgress); } progressDialog.show(); } private void closeLoadDialog() { // TODO Auto-generated method stub if(progressDialog!=null && progressDialog.isShowing()) { progressDialog.dismiss(); progressDialog=null; } } }); //覆盖webview默认通过第三方或者系统浏览器打开浏览器的行为 webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //返回值为true 控制在webview中打开 //返回值为false 控制在系统或者第三方中打开 view.loadUrl(url); return true; }; //webview错误时候的处理 @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); //加载本地页面展示错误 //view.loadUrl("file:///android_asset/error.html"); //显示错误信息 tv_webview_error.setText("404错误"); webView.setVisibility(View.GONE); } }); //加载本地文件 //"file:///" //webView.loadUrl("file:///android_asset/example.html"); //加载web资源 webView.loadUrl("http://182.92.167.82:5001/admin/"); } }