android webView setWebChromeClient and setWebClient

本文详细介绍了Android中WebView的应用,包括如何将网页嵌入App内,并通过setWebChromeClient和setWebClient实现与JavaScript交互及处理各类网页事件。
android.webkit库聚合了webkit内核的浏览器功能,webview就是她的一个控件,可以使得网页轻松的内嵌到app里。

并且比较强大的是,还可以直接跟js相互调用。

webview有两个方法:setWebChromeClient和setWebClient

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/");
<think> 我们正在讨论Android WebView组件的setVerticalScrollBarEnabled方法。 根据引用[1][2][4]中的代码片段,这个方法用于设置垂直滚动条的可见性。 具体来说: - webView.setVerticalScrollBarEnabled(false) 表示隐藏垂直滚动条。 - webView.setVerticalScrollBarEnabled(true) 表示显示垂直滚动条。 引用[2]明确指出了这个方法的作用:取消或设置垂直滚动条的显示。 另外,引用[4]中的示例代码也展示了在布局中添加WebView并设置垂直滚动条不可见: WebView view = new WebView(this); view.setVerticalScrollBarEnabled(false); 此外,引用[3]提到了WebView的两个重要方法setWebChromeClientsetWebClient,但这两个方法与滚动条设置无关,所以可以忽略。 因此,我们可以总结: setVerticalScrollBarEnabled(boolean enabled) 是WebView的一个方法,用于控制垂直滚动条的显示和隐藏。 使用场景: 当我们需要自定义WebView的滚动条样式,或者为了界面美观而隐藏滚动条时,可以使用这个方法。 注意: 隐藏滚动条并不意味着禁用滚动,用户仍然可以通过触摸滑动来滚动内容,只是滚动条不可见。 可能的问题及解决方案: 1. 为什么设置了setVerticalScrollBarEnabled(false)后,滚动条仍然可见? - 确保调用方法时传入的参数是false(注意大小写)。 - 检查是否有其他代码(如样式设置)覆盖了该设置。 - 考虑WebView的版本或设备兼容性,某些定制ROM可能会有差异。 2. 如何同时隐藏水平和垂直滚动条? - 同时调用: webView.setVerticalScrollBarEnabled(false); webView.setHorizontalScrollBarEnabled(false); 3. 如何自定义滚动条样式? - 可以使用WebView的setScrollBarStyle(int style)方法,例如: webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); // 设置滚动条样式 - 也可以尝试自定义WebView的子类并重写绘制滚动条的方法。 根据以上信息,我们可以组织回答。 </think> ### WebView.setVerticalScrollBarEnabled 方法详解 #### 1. **方法作用** `webView.setVerticalScrollBarEnabled(boolean enabled)` 用于控制 WebView 的**垂直滚动条显示状态**: - `true`:显示垂直滚动条(默认状态) - `false`:隐藏垂直滚动条 此方法仅影响视觉显示,**不影响实际滚动功能**(用户仍可通过触摸滑动滚动内容)[^2][^4]。 #### 2. **典型使用场景** ```java WebView webView = new WebView(context); // 隐藏垂直滚动条 webView.setVerticalScrollBarEnabled(false); // 隐藏水平滚动条(常搭配使用) webView.setHorizontalScrollBarEnabled(false); ``` 适用场景: - 需要全沉浸式页面(如阅读器、海报展示) - 自定义滚动条样式时先隐藏系统默认条 - 解决滚动条与页面布局冲突问题[^1][^4] #### 3. **注意事项及常见问题** - **滚动条残留问题**: 若隐藏后仍出现滚动条,请检查是否在 XML 布局中设置了 `android:scrollbars="vertical"`,需删除该属性或代码覆盖[^2]。 - **与滚动逻辑的关系**: 此方法**不控制滚动行为**,仅控制视觉元素。禁用滚动需另用: ```java webView.setOnTouchListener((v, event) -> true); // 拦截触摸事件 ``` - **兼容性优化**: 在 `onPageFinished()` 回调中设置以避免初始化闪烁: ```java webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { view.setVerticalScrollBarEnabled(false); } }); ``` #### 4. **扩展方案** - **自定义滚动条**: 通过 CSS 覆盖默认样式(需启用 WebView 的 JavaScript 支持): ```css ::-webkit-scrollbar { display: none; } /* 隐藏所有滚动条 */ ``` - **滚动监听**: 结合 `WebView.OnScrollChangeListener` 实现滚动特效(API 23+)[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值