博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android中WebView小结
阅读量:7101 次
发布时间:2019-06-28

本文共 3981 字,大约阅读时间需要 13 分钟。

hot3.png

webview有两个方法:setWebChromeClient和setWebClient

1.setWebChromeClient

主要处理解析,渲染网页等浏览器做的事情

WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 

例:

onCloseWindow(关闭WebView) 

onCreateWindow() 
onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出) 
onJsPrompt 
onJsConfirm 
onProgressChanged //加载进度条
onReceivedIcon 
onReceivedTitle

例如进度条:webview1.setWebChromeClient(new WebChromeClient()

        {         
            public void onProgressChanged(WebView view, int progress)  
            {  
                setProgress(progress * 100);    
                if(progress == 100){    
                    imageView1.setVisibility(View.GONE);
                    tv1.setVisibility(View.GONE);
                    pb1.setVisibility(View.GONE);
                    fy1.setVisibility(View.GONE);
                }
            }
        }
        );   

2.WebViewClient

就是帮助WebView处理各种通知、请求事件的,具体来说包括: 

onLoadResource 

onPageStart 
onPageFinish 
onReceiveError 
onReceivedHttpAuthRequest 

webview1.setWebViewClient(new WebViewClient() {                                   public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)

{ // Handle the error  

Toast.makeText(getApplicationContext(), "网络连接失败 ,请连接网络。", Toast.LENGTH_SHORT).show();

} public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); //设置字符集编码   

webview1.getSettings().setDefaultTextEncodingName("UTF-8");
webview1.loadUrl();

例如:

package com.android.webview.activity;

import android.annotation.SuppressLint;

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

@SuppressLint("SetJavaScriptEnabled")

public class MainActivity extends Activity {

 private WebView webviewBasic;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_PROGRESS);
  setContentView(R.layout.weblayout);
  //加载web资源
  WebView webviewBasic=(WebView)findViewById(R.id.webview);
  webviewBasic.setWebChromeClient(new WebChromeClient(){
   public void onProgressChanged(WebView view,int progress){
    MainActivity.this.setProgress(progress*100);
   }
  });
  
//  webviewBasic.loadUrl("");
  webviewBasic.loadUrl("");
  WebSettings setting=webviewBasic.getSettings();
  setting.setJavaScriptEnabled(true);
  
//  init();
  
 }

 //在程序内打开网页

// private void init(){
//  webviewBasic=(WebView)findViewById(R.id.webview);
//  //webview加载web资源
//  webviewBasic.loadUrl("");
//  //覆盖webview默认使用第三方或系统默认浏览器打开网页的行为,使网页webView打开
//  webviewBasic.setWebViewClient(new WebViewClient(){
//   @Override
//   public boolean shouldOverrideUrlLoading(WebView view,String url){
//    view.loadUrl(url);
//    //返回值是true的时候控制区webview打开,
//    //返回值是false的时候调用系统浏览器或者第三方浏览器
//    return true;
//   }
//  });
//  
// }
 
 //加载JavaScript页面
// private void init(){
//  
//  webviewBasic=(WebView)findViewById(R.id.webview);
//  webviewBasic.loadUrl("");
//  webviewBasic.setWebViewClient(new WebViewClient(){
//   @Override
//   public boolean shouldOverrideUrlLoading(WebView view,String url){
//    view.loadUrl(url);
//    return true;
//   }
//  });
//  //启用支持JavaScript
//  WebSettings settings=webviewBasic.getSettings();
//  settings.setJavaScriptEnabled(true);
  
  //判断页面加载过程
//  webviewBasic.setWebChromeClient(new WebChromeClient(){
//   @Override
//   public void onProgressChanged(WebView view,int newProgress){
    if(newProgress==100){
     Toast.makeText(getApplicationContext(), "加载完成", Toast.LENGTH_LONG).show();
    }
    else{
     Toast.makeText(getApplicationContext(), "正在加载", Toast.LENGTH_LONG).show();
    }
//    
//    MainActivity.this.setProgress(newProgress*100);
//    
//   }
//  });
//  
// }
 
 //如果希望浏览的网页后退而不是退出浏览器,需要WebView覆盖URL加载,让它自动生成访问记录,那样就可以通过前进或者后退访问已访问过的站点
 
 //改写物理按键-----返回的逻辑
 @Override
 public boolean onKeyDown(int keyCode,KeyEvent event){
  if(keyCode==KeyEvent.KEYCODE_BACK){
   webviewBasic.goBack();//返回上一页
   return true;
  }
  else{
   System.exit(0);//退出程序
  }
  
  return super.onKeyDown(keyCode, event);
  
 }

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/whzhen1452/blog/806953

你可能感兴趣的文章
软件构造期末复习考点总结
查看>>
7 Django的模板层
查看>>
EF中Json序列化对象时检测到循环引用的解决办法
查看>>
词向量概况
查看>>
css3 画圆记录
查看>>
javascript中级
查看>>
《CLR Via C# 第3版》笔记之(十五) - 接口
查看>>
golang实现ios推送
查看>>
【Linux】linux常用基本命令
查看>>
libsvm使用说明
查看>>
CodeForces 595A Vitaly and Night
查看>>
秒杀读后感2
查看>>
插入排序
查看>>
Session机制详解
查看>>
【转】使用PHP导入和导出CSV文件
查看>>
面向对象概念思想再理解 2.0
查看>>
VS code 格式化插件, 仅需一步, 无须配置
查看>>
EL表达式的一些知识
查看>>
web 中的认证方式
查看>>
node模块之path——path.join和path.resolve的区别
查看>>