Android--------WebView+H5开发仿美团 预加载,加载失败和重新加载
Android嵌入式开发已经占大多数了,很多界面都是以网页的形式展示,WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用。
本博客主要是模仿美团的旅游出行模块的预加载,网页加载失败和网页重新加载,
效果如图:
图中的步骤是 无网络情况下加载网页,则加载不出来,出现提示界面,去把网络打开,在刷新则又可以加载界面,
上图 在没有网络时,多次点击刷新时会出现Android WebView原生的网页加载失败的界面,这是一个Bug。
而我的案例效果图 如下:
在AndroidManifest.xml设置访问网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
相关代码:
webview.setHorizontalScrollBarEnabled(false);//水平不显示 webview.setVerticalScrollBarEnabled(false); //垂直不显示 WebSettings webSettings = webview.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setBuiltInZoomControls(false); webSettings.setSupportZoom(false); webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.supportMultipleWindows(); //多窗口 webSettings.setAppCacheMaxSize(1024 * 1024 * 25);//设置缓冲大小,我设的是8M webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); webSettings.setSavePassword(true); webSettings.setAppCacheEnabled(true); webSettings.setSaveFormData(true); webSettings.setDomStorageEnabled(true); webSettings.setDatabaseEnabled(true);
//设置缓存 if (!NetUtils.isNetworkAvailable(MainActivity.this)) { webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); } else { webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); } webview.loadUrl("url");
private void showWebViewLoad(){ webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); linearLayout.setVisibility(View.GONE); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); webviewError.setVisibility(View.VISIBLE); } }); }
在对应的方法中完成相关功能;
源码下载Github:https://github.com/DickyQie/android-webview-ui