首页 技术 正文
技术 2022年11月21日
0 收藏 637 点赞 4,323 浏览 3155 个字

原文地址:https://www.2cto.com/kf/201703/616868.html

Android webview 写入cookie的解决方法以及一些属性设置,webview怎么设置写入Cookie的问题,项目中正好APP和网页交互中要用到免登录,因为在网上搜索了很多种方法,看到一个解决问题了,现在记录分享下。

?

12345678910111213 void setCookie() {       String StringCookie = "key=" + value + ";path=/"       CookieManager cookieManager = CookieManager.getInstance();       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {           cookieManager.removeSessionCookies(null);           cookieManager.flush();       else {           cookieManager.removeSessionCookie();           CookieSyncManager.getInstance().sync();       }       cookieManager.setAcceptCookie(true);       cookieManager.setCookie(url, StringCookie);   }

以上代码在webview设置属性、webview.loadUrl之前调用就可以了

webview设置的一些属性:

?

123456789101112131415161718192021222324252627 //声明WebSettings子类WebSettings webSettings = webView.getSettings();  //支持javascriptwebSettings.setJavaScriptEnabled(true); //设置自适应屏幕,两者合用webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //缩放操作webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件 //设置WebView缓存//优先使用缓存:webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//缓存模式如下://LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据//LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。//LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.//LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。 //不使用缓存:webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

关于前进 / 后退网页:

?

123456789101112 //是否可以后退Webview.canGoBack()//后退网页Webview.goBack()//是否可以前进                    Webview.canGoForward()//前进网页Webview.goForward() //以当前的index为起始点前进或者后退到历史记录中指定的steps//如果steps为负数则为后退,正数则为前进Webview.goBackOrForward(intsteps)

常见用法:Back键控制网页后退

在不做任何处理前提下 ,浏览网页时点击系统的“Back”键,整个 Browser 会调用 finish()而结束自身 目标:点击返回后,是网页回退而不是推出浏览器 解决方案:在当前Activity中处理并消费掉该 Back 事件

?

1234567891011121314151617 @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {    if ((keyCode == KEYCODE_BACK) && Webview.canGoBack()) {        Webview.goBack();        return true;    }    return super.onKeyDown(keyCode, event);}//或者下面这种   @Overridepublic void onBackPressed() {  if (webView.canGoBack()) {          webView.goBack();          return;     }        super.onBackPressed(); }

注意事项:如何避免WebView内存泄露?

不在xml中定义 Webview ,而是在需要的时候在Activity中创建,并且Context使用 getApplicationgContext()

?

1234 LinearLayout.LayoutParams params = newLinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);        webView= new WebView(getApplicationContext());        webView.setLayoutParams(params);        mLayout.addView(webView);

在 Activity 销毁( WebView )的时候,先让 WebView 加载null内容,然后移除 WebView,再销毁 WebView,最后置空。

?

123456789101112 @Override    protected void onDestroy() {        if (webView!= null) {            webView.loadDataWithBaseURL(null"""text/html""utf-8"null);            webView.clearHistory();             ((ViewGroup) webView.getParent()).removeView(webView);            webView.destroy();            webView= null;        }        super.onDestroy();    }
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,999
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,357
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,140
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848