赞
踩
简介: 基于腾讯 x5 开源库,提高 webView 开发效率,大概要节约你百分之六十的时间成本。该案例支持处理 js 的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异常 error 状态、支持视频播放并且可以全频、支持加载 word,xls,ppt,pdf,txt 等文件文档、发短信、打电话、发邮件、打开文件操作上传图片、唤起原生 App、x5 库为最新版本,功能强大。
标签:
目录介绍
1.1 案例展示效果
1.2 该库功能和优势
1.3 相关类介绍说明
2.1 如何引入
implementation 'cn.yc:WebViewLib:1.1.6'
2.2 最简单使用
X5WebUtils.init(this);
- <BridgeWebView
- android:id="@+id/web_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scrollbarSize="3dp" />
- <X5WebView
- android:id="@+id/web_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scrollbarSize="3dp" />
- <可以使用 ProgressWebView
- android:id="@+id/web_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scrollbarSize="3dp" />
如何使用自己的 WebViewClient 和 WebChromeClient
- //主要是在 X5WebViewClient 和 X5WebChromeClient 已经做了很多常见的逻辑处理,如果不满足你使用,可以如下这样写
- MyX5WebViewClient webViewClient = new MyX5WebViewClient(webView, this);
- webView.setWebViewClient(webViewClient);
- MyX5WebChromeClient webChromeClient = new MyX5WebChromeClient(this);
- webView.setWebChromeClient(webChromeClient);
-
- private class MyX5WebViewClient extends X5WebViewClient {
- public MyX5WebViewClient(BridgeWebView webView, Context context) {
- super(webView, context);
- }
-
- //重写你需要的方法即可
- }
-
- private class MyX5WebChromeClient extends X5WebChromeClient{
- public MyX5WebChromeClient(Activity activity) {
- super(activity);
- }
-
- //重写你需要的方法即可
- }
2.3 常用 api
关于 web 的接口回调,包括常见状态页面切换,进度条变化等监听处理
- mWebView.getX5WebChromeClient().setWebListener(interWebListener);
- private InterWebListener interWebListener = new InterWebListener() {
- @Override
- public void hindProgressBar() {
- pb.setVisibility(View.GONE);
- }
-
- @Override
- public void showErrorView(@X5WebUtils.ErrorType int type) {
- //设置自定义异常错误页面
- }
-
- @Override
- public void startProgress(int newProgress) {
- //该方法是是监听进度条进度变化的逻辑
- pb.setProgress(newProgress);
- }
- };
关于视频播放的时候,web 的接口回调,主要是视频相关回调,比如全频,取消全频,隐藏和现实 webView
- x5WebChromeClient = x5WebView.getX5WebChromeClient();
- x5WebChromeClient.setVideoWebListener(new VideoWebListener() {
- @Override
- public void showVideoFullView() {
- //视频全频播放时监听
- }
-
- @Override
- public void hindVideoFullView() {
- //隐藏全频播放,也就是正常播放视频
- }
-
- @Override
- public void showWebView() {
- //显示 webView
- }
-
- @Override
- public void hindWebView() {
- //隐藏 webView
- }
- });
- //X5WebView 中
- //设置是否开启密码保存功能,不建议开启,默认已经做了处理,存在盗取密码的危险
- mWebView.setSavePassword(false);
- //是否开启软硬件加速
- mWebView.setOpenLayerType(false);
- //获取 x5WebChromeClient 对象
- x5WebChromeClient = mWebView.getX5WebChromeClient();
- //获取 x5WebViewClient 对象
- x5WebViewClient = mWebView.getX5WebViewClient();
- private WebProgress pb;
- //显示进度条
- pb.show();
- //设置进度条过度颜色
- pb.setColor(Color.BLUE,Color.RED);
- //设置单色进度条
- pb.setColor(Color.BLUE);
- //为单独处理 WebView 进度条
- pb.setWebProgress(newProgress);
- //进度完成后消失
- pb.hide();
- //同步 cookie
- X5WebUtils.syncCookie(this,"url",cookieList);
- //清除 cookie
- X5WebUtils.removeCookie(this);
2.4 使用建议
优化一下相关的操作
关于设置 js 支持的属性
- @Override
- public void onResume() {
- super.onResume();
- if (mWebView != null) {
- mWebView.getSettings().setJavaScriptEnabled(true);
- }
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- if (mWebView != null) {
- mWebView.getSettings().setJavaScriptEnabled(false);
- }
- }
- @Override
- protected void onDestroy() {
- try {
- if (webView != null) {
- webView.stopLoading();
- webView.destroy();
- webView = null;
- }
- } catch (Exception e) {
- Log.e("X5WebViewActivity", e.getMessage());
- }
- super.onDestroy();
- }
2.5 关于 web 页面异常状态区分类型
- @Override
- public void showErrorView(@X5WebUtils.ErrorType int type) {
- switch (type){
- //没有网络
- case X5WebUtils.ErrorMode.NO_NET:
- break;
- //404,网页无法打开
- case X5WebUtils.ErrorMode.STATE_404:
- break;
- //onReceivedError,请求网络出现 error
- case X5WebUtils.ErrorMode.RECEIVED_ERROR:
- break;
- //在加载资源时通知主机应用程序发生 SSL 错误
- case X5WebUtils.ErrorMode.SSL_ERROR:
- break;
- default:
- break;
- }
- }
2.6 该库流程图
3.1 Java 调用 js 的使用方法
代码如下所示,下面 updateAttentionStatus 代表 js 这边的方法名称
webView.callHandler(“updateAttentionStatus”, …, new CallBackFunction());这是 Java 层主动调用 Js 的”updateAttentionStatus”方法。
- mWebView.callHandler("updateAttentionStatus", attention, new CallBackFunction() {
- @Override
- public void onCallBack(String data) {
-
- }
- });
3.2 js 调用 java 的使用方法
- mWebView.registerHandler("toPhone", new BridgeHandler() {
- @Override
- public void handler(String data, CallBackFunction function) {
- try {
- JSONObject jsonData = new JSONObject(data);
- String phone = jsonData.optString("phone");
- //todo 打电话
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- });
- //注意,这里回传数据目前只是支持 String 字符串类型
- function.onCallBack("回调数据");
3.3 js 的调用时机分析
关于其他内容介绍
关于博客汇总链接
其他推荐
关于 LICENSE
- Copyright 2017 yangchong211(github.com/yangchong211)
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。