WebView使用


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);
                }
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值