WebView使用
16lz
2021-01-26
https://www.cnblogs.com/xunzhi/p/6023190.html
public class SecondActivity extends AppCompatActivity { private WebView wb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); wb = (WebView) findViewById(R.id.web); WebSettings webSettings = wb.getSettings(); //设置可以访问文件 webSettings.setAllowFileAccess(true); //设置支持缩放 webSettings.setBuiltInZoomControls(true); webSettings.setJavaScriptEnabled(true); //设置Web视图 wb.setWebViewClient(new webViewClient ()); //加载数据 wb.loadUrl("https://www.baidu.com/"); } @Override //设置回退 //覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法 public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && wb.canGoBack()) { wb.goBack(); //goBack()表示返回WebView的上一页面 return true; } finish();//结束退出程序 return false; } //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开 private class webViewClient extends WebViewClient { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }}
webView的优化
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小 webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小 webView.loadUrl("https://hao.360.cn/?a1004"); webSettings.setAllowFileAccess(true); //设置可以访问文件 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片 webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
1、设置WebView 缓存模式
private void initWebView() { mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setRenderPriority(RenderPriority.HIGH); mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); //设置 缓存模式 // 开启 DOM storage API 功能 mWebView.getSettings().setDomStorageEnabled(true); //开启 database storage API 功能 mWebView.getSettings().setDatabaseEnabled(true); String cacheDirPath = getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME; // String cacheDirPath = getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME; Log.i(TAG, "cacheDirPath="+cacheDirPath); //设置数据库缓存路径 mWebView.getSettings().setDatabasePath(cacheDirPath); //设置 Application Caches 缓存目录 mWebView.getSettings().setAppCachePath(cacheDirPath); //开启 Application Caches 功能 mWebView.getSettings().setAppCacheEnabled(true); }
2.优先使用缓存:
private void initcaCheMode() { //缓存模式如下: //LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据 //LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。 //LOAD_NO_CACHE: 不使用缓存,只从网络获取数据. //LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//没网,则从本地获取,即离线加载 webSettings.setDomStorageEnabled(true); // 开启 DOM storage API 功能 webSettings.setDatabaseEnabled(true); //开启 database storage API 功能 webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能 String cacheDirPath = getFilesDir().getAbsolutePath() + "webjs/caChe"; webSettings.setAppCachePath(cacheDirPath); //设置 Application Caches 缓存目录}
3、清除缓存
/** * 清除WebView缓存 */ public void clearWebViewCache(){ //清理Webview缓存数据库 try { deleteDatabase("webview.db"); deleteDatabase("webviewCache.db"); } catch (Exception e) { e.printStackTrace(); } //WebView 缓存文件 File appCacheDir = new File(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME); Log.e(TAG, "appCacheDir path="+appCacheDir.getAbsolutePath()); File webviewCacheDir = new File(getCacheDir().getAbsolutePath()+"/webviewCache"); Log.e(TAG, "webviewCacheDir path="+webviewCacheDir.getAbsolutePath()); //删除webview 缓存目录 if(webviewCacheDir.exists()){ deleteFile(webviewCacheDir); } //删除webview 缓存 缓存目录 if(appCacheDir.exists()){ deleteFile(appCacheDir); } }
4、在使用WebView加载网页的时候,有一些固定的资源文件如js/css/图片等资源会比较大,如果直接从网络加载会导致页面加载的比较慢,而且会消耗比较多的流量。所以这些文件应该放在assets里面同app打包。
5.webview的setwebCharomeClient 中 标题 onReceivedTitle 加载进度onProgressChanged 方法
webView.setWebChromeClient(new WebChromeClient(){ //获取网站标题 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); webtitle.setText(title); } //获取网站加载进度 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); if(newProgress < 100){ String progress = newProgress + "%"; tvLoading.setText(progress); }else if(newProgress == 100){ String progress = newProgress + "%"; tvLoading.setText(progress); } } });
更多相关文章
- android 代码实现通知 音效和震动
- android 设置seekBar 和Progress背景色
- Android(安卓)textview中某些字段设置点击监听
- android子菜单&&组菜单
- Android的TextView设置padding无效
- Android(安卓)Gallery获取滑动停止的位置
- Glide回调设置Bitmap对象
- 自定义PopupWindow动画效果
- Android(安卓)联网设置