博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android第三方webview框架推荐(强烈推荐)
阅读量:3975 次
发布时间:2019-05-24

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

        正在做的项目用系统webview不能满足兼容问题,试了腾讯的TBS和CrossWalk框架,还是不能解决问题。在一个H5界面的一个图片跳转链接上(前端说用的是angular框架),无论是用TBS还是用CrossWalk都会出现部分机型点击无响应的问题,严重的甚至出现点击闪退的情况。苦苦百度了许久仍没有找到更多的方案,后来想到直接在github上搜索试试看,于是让我发现了这个框架,一下子解决了我的问题。这个框架就是

        AgentWeb是对系统WebView的封装,解决了常见的兼容问题和其他问题,不过用起来稍微有一点复杂,我自己改了一下demo当中的fragment,记录一下:

implementation 'com.just.agentweb:agentweb:4.0.2'

public class AgentWebFragment extends Fragment {	public AgentWeb mAgentWeb;	@Nullable	@Override	public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {		return inflater.inflate(R.layout.fragment_agent_webview, container, false);	}	@Override	public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {		super.onViewCreated(view, savedInstanceState);		String url = "https://m.vip.com/?source=www&jump_https=1";		mAgentWeb = AgentWeb.with(this)//				.setAgentWebParent((LinearLayout) view, -1, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT))//传入AgentWeb的父控件。				.useDefaultIndicator(-1, 3)//设置进度条颜色与高度,-1为默认值,高度为2,单位为dp。				.setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) //严格模式 Android 4.2.2 以下会放弃注入对象 ,使用AgentWebView没影响。				.setMainFrameErrorView(R.layout.agentweb_error_page, -1) //参数1是错误显示的布局,参数2点击刷新控件ID -1表示点击整个布局都刷新, AgentWeb 3.0.0 加入。				.setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.DISALLOW)//打开其他页面时,弹窗质询用户前往其他应用 AgentWeb 3.0.0 加入。				.interceptUnkownUrl() //拦截找不到相关页面的Url AgentWeb 3.0.0 加入。				.createAgentWeb()//创建AgentWeb。				.ready()//设置 WebSettings。				.go(url); //WebView载入该url地址的页面并显示。		AgentWebConfig.debug();		// AgentWeb 4.0 开始,删除该类以及删除相关的API//        DefaultMsgConfig.DownloadMsgConfig mDownloadMsgConfig = mAgentWeb.getDefaultMsgConfig().getDownloadMsgConfig();		//  mDownloadMsgConfig.setCancel("放弃");  // 修改下载提示信息,这里可以语言切换		// AgentWeb 没有把WebView的功能全面覆盖 ,所以某些设置 AgentWeb 没有提供 , 请从WebView方面入手设置。		mAgentWeb.getWebCreator().getWebView().setOverScrollMode(WebView.OVER_SCROLL_NEVER);		//mAgentWeb.getWebCreator().getWebView()  获取WebView .//		mAgentWeb.getWebCreator().getWebView().setOnLongClickListener();		mAgentWeb.getWebCreator().getWebView().getSettings().setJavaScriptEnabled(true);//        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);		//优先使用网络		mAgentWeb.getWebCreator().getWebView().getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);		//将图片调整到适合webview的大小		mAgentWeb.getWebCreator().getWebView().getSettings().setUseWideViewPort(true);		//支持内容重新布局		mAgentWeb.getWebCreator().getWebView().getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);		//支持自动加载图片		mAgentWeb.getWebCreator().getWebView().getSettings().setLoadsImagesAutomatically(true);		//当webview调用requestFocus时为webview设置节点		mAgentWeb.getWebCreator().getWebView().getSettings().setNeedInitialFocus(true);		//自适应屏幕		mAgentWeb.getWebCreator().getWebView().getSettings().setUseWideViewPort(true);		mAgentWeb.getWebCreator().getWebView().getSettings().setLoadWithOverviewMode(true);		//开启DOM storage API功能(HTML5 提供的一种标准的接口,主要将键值对存储在本地,在页面加载完毕后可以通过 javascript 来操作这些数据。)		mAgentWeb.getWebCreator().getWebView().getSettings().setDomStorageEnabled(true);		//支持缩放		mAgentWeb.getWebCreator().getWebView().getSettings().setBuiltInZoomControls(true);		mAgentWeb.getWebCreator().getWebView().getSettings().setSupportZoom(true);		//允许webview对文件的操作		mAgentWeb.getWebCreator().getWebView().getSettings().setAllowFileAccess(true);		mAgentWeb.getWebCreator().getWebView().getSettings().setAllowFileAccessFromFileURLs(true);		mAgentWeb.getWebCreator().getWebView().getSettings().setAllowUniversalAccessFromFileURLs(true);		mAgentWeb.getWebCreator().getWebView().setOnKeyListener(new View.OnKeyListener() {			@Override			public boolean onKey(View v, int keyCode, KeyEvent event) {				if (event.getAction() == KeyEvent.ACTION_DOWN) {					if (keyCode == KeyEvent.KEYCODE_BACK && mAgentWeb.getWebCreator().getWebView().canGoBack()) { // 表示按返回键时的操作						mAgentWeb.getWebCreator().getWebView().goBack(); // 后退						// webview.goForward();//前进						return true; // 已处理					} else if (keyCode == KeyEvent.KEYCODE_BACK) {						getActivity().moveTaskToBack(true);					}				}				return false;			}		});	}	@Override	public void onResume() {		mAgentWeb.getWebLifeCycle().onResume();//恢复		super.onResume();	}	@Override	public void onPause() {		mAgentWeb.getWebLifeCycle().onPause(); //暂停应用内所有WebView , 调用mWebView.resumeTimers();/mAgentWeb.getWebLifeCycle().onResume(); 恢复。		super.onPause();	}	@Override	public void onDestroyView() {		mAgentWeb.getWebLifeCycle().onDestroy();		super.onDestroyView();	}}

布局文件fragment_agent_webview:

神奇吧,布局文件都不需要写webview,而且还自带加载进度条。

其他功能暂时没有去测,期待更多惊喜。

PS:如果加载网页明明一开始成功了但最后出现“出错啦!点击空白处刷新~”的界面,不要慌,请看我下一篇博文:

转载地址:http://ilrki.baihongyu.com/

你可能感兴趣的文章
My97日期控件
查看>>
30分钟3300%性能提升——python+memcached网页优化小记
查看>>
confmgr项目,django,dwz相关问题
查看>>
linux文件共享
查看>>
linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结(tar包解压)
查看>>
vi和vim区别
查看>>
程序员经典语录
查看>>
Django性能优化
查看>>
python模块学习 ---- smtplib 邮件发送
查看>>
Python模块学习 ---- subprocess 创建子进程
查看>>
python求时间差
查看>>
Python网页抓取urllib,urllib2,httplib[2]
查看>>
Python urllib2递归抓取某个网站下图片
查看>>
JS清空多文本框|文本域
查看>>
linux常用命令(操作命令)
查看>>
Linux一些经典书籍
查看>>
apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80
查看>>
linux kill用法、killall、pkill、xkill
查看>>
Python笔记——排序算法的实现
查看>>
jQuery数据显示插件整合实现代码
查看>>