setwebviewclient()和setwebchromeclient()

本文详细对比了WebChromeClient和WebViewClient的区别,包括它们的功能、方法及应用场景,提供了实例代码帮助理解如何在Android应用中利用这两个类来处理webview的相关事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整理一些在网上搜集的webview的两个方法的区别:setwebviewclient()和setwebchromeclient(),以备查阅。

原文网址:http://www.android100.org/html/201306/26/3290.html

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);
                }
            }
        }
        );    


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("http://www.android100.org/");

} 

</pre><div class="cnblogs_code"><pre><span style="font-family: 'Microsoft YaHei', 微软雅黑, 'Microsoft JhengHei', 华文细黑, STHeiti, MingLiu;"></span>
     使用WebChromeClient 可以操作Javascript dialogs(js脚本对话框), favicons(添加收藏的标志), titles(标题), 和 progress(进度条).
简单的说,如果除了加载HTML的话,只需要用WebViewClient即可,但是在进行兼容互联网上附加javascript的页面的时候和调用javascript对话框的时候,或者功能较为复杂的内嵌操作的时候,建议使用WebChromeClient 。 http://bbs.52studying.com/thread-434-1-1.html
public   boolean  shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url);  return   true ; } });  // 设置字符集编码   
<think>好的,用户的问题是关于在WebView中自定义图标或者相关的设置教程。我需要根据提供的引用内容来整理答案。首先,用户提到的引用[1]到[4]都涉及WebView的基本使用自定义方法,比如加载页面、处理请求修改菜单。不过,这些引用中没有直接提到图标设置,可能需要结合相关知识推断解决方案。 首先,自定义图标可能涉及两个方面:一是修改WebView本身的控件图标,比如加载进度条、错误页面中的图标;二是通过加载的网页内容来更改图标,比如在HTML中添加自定义图标资源。 对于修改WebView控件本身的图标,可能需要通过Android的原生UI来设置。例如,在加载网页时显示自定义的进度条图标,或者在自定义错误页面中使用特定图标。引用[1]提到setWebViewClientsetWebChromeClient,这两个类可以用来处理页面加载事件,比如onPageStarted(引用[2])onReceivedError,可能可以在这些回调中加载自定义布局,包含所需图标。 另外,引用[3]提到修改右键菜单,这可能涉及到替换WebView的默认UI元素,包括图标。虽然具体实现未详细说明,但可以推测需要覆盖WebView的默认行为,使用自定义视图。 关于在加载的内容中设置图标,引用[4]中的loadDataWithBaseURL方法可以加载自定义HTML内容,其中可以包含图标的链接或Base64编码的图像数据。例如,在HTML中通过<img>标签引用本地资源或内联图片。 需要注意的是,Android WebView本身并不直接提供修改内部图标(比如前进、后退按钮)的API,这些通常是浏览器控件的一部分。如果用户指的是这些导航图标,可能需要自己实现一个包含图标的工具栏,并通过WebView的方法控制导航。 总结可能的步骤: 1. 使用WebChromeClient显示自定义进度条或图标。 2. 在onReceivedError中加载自定义错误页面,包含图标。 3. 通过loadDataWithBaseURL加载带有自定义图标的HTML内容。 4. 实现自定义工具栏,替换默认的导航图标。 需要验证这些方法是否符合引用内容,并确保回答结构清晰,步骤正确。</think>### 如何在WebView中自定义图标 在Android WebView中自定义图标主要涉及**控件UI定制****网页内容图标嵌入**两种方式,以下是具体实现方法: --- #### 方法1:通过原生UI控件添加图标 1. **自定义加载进度条图标** 使用`WebChromeClient`的`onProgressChanged`回调,结合自定义进度条控件显示图标: ```java webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { // 更新自定义进度条图标(如旋转加载图标) progressBar.setProgress(newProgress); } }); ``` 2. **自定义错误页面图标** 通过`WebViewClient`的`onReceivedError`加载包含图标的本地HTML: ```java webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { String html = "<img src='file:///android_res/drawable/error_icon.png'/> 加载失败"; view.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null); } }); ``` 需将图标文件(如`error_icon.png`)放入`res/drawable`目录[^1][^2]。 --- #### 方法2:在网页内容中嵌入图标 1. **通过HTML/CSS直接引用本地图标** 使用`loadDataWithBaseURL`加载包含本地资源的HTML: ```java String html = "<img src='file:///android_asset/icon.png'/> 自定义图标"; webView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null); ``` 需将图标文件放入`assets`目录[^4]。 2. **使用Base64内联图标** 直接将图标编码为Base64嵌入HTML: ```html <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAA..." /> ``` --- #### 方法3:自定义右键菜单图标(仅限桌面端WebView) 参考Mac WebView的右键菜单定制方法,替换菜单项图标[^3]: ```swift // Swift示例(Mac平台) let menu = NSMenu() let item = NSMenuItem(title: "保存", action: #selector(save), keyEquivalent: "") item.image = NSImage(named: "save_icon") menu.addItem(item) webView.menu = menu ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值