Android webview 写入cookie的解决方法以及一些属性设置
2017-03-23 18:19
1206 查看
webview怎么设置写入Cookie的问题,项目中正好APP和网页交互中要用到免登录,因为在网上搜索了很多种方法,看到一个解决问题了,现在记录分享下
以上代码在webview设置属性、webview.loadUrl之前调用就可以了
常见用法:Back键控制网页后退
在不做任何处理前提下 ,浏览网页时点击系统的“Back”键,整个 Browser 会调用 finish()而结束自身
目标:点击返回后,是网页回退而不是推出浏览器
解决方案:在当前Activity中处理并消费掉该 Back 事件
在 Activity 销毁( WebView )的时候,先让 WebView 加载null内容,然后移除 WebView,再销毁 WebView,最后置空。
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设置的一些属性:
//声明WebSettings子类 WebSettings webSettings = webView.getSettings(); //支持javascript webSettings.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);
关于前进 / 后退网页:
//是否可以后退 Webview.canGoBack() //后退网页 Webview.goBack() //是否可以前进 Webview.canGoForward() //前进网页 Webview.goForward() //以当前的index为起始点前进或者后退到历史记录中指定的steps //如果steps为负数则为后退,正数则为前进 Webview.goBackOrForward(intsteps)
常见用法:Back键控制网页后退
在不做任何处理前提下 ,浏览网页时点击系统的“Back”键,整个 Browser 会调用 finish()而结束自身
目标:点击返回后,是网页回退而不是推出浏览器
解决方案:在当前Activity中处理并消费掉该 Back 事件
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KEYCODE_BACK) && Webview.canGoBack()) { Webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } //或者下面这种 @Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); return; } super.onBackPressed(); }
注意事项:如何避免WebView内存泄露?
不在xml中定义 Webview ,而是在需要的时候在Activity中创建,并且Context使用 getApplicationgContext()LinearLayout.LayoutParams params = new LinearLayout.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,最后置空。
@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(); }
相关文章推荐
- android 通过设置cookie解决app 登录后WebView还要重新登陆问题
- android上WebView设置cookie,以及设置webview cookie在部分手机失效
- android上WebView设置cookie,以及设置webview cookie在部分手机失效
- Android使用TextView,设置onClick属性无效解决的方法
- 解决 Android 中 View 的 setPivotX 和 setPivotY 不生效的问题以及设置缩放中心的方法
- Webview的一些问题汇总以及解决方法
- Android控件WebView的属性设置和相关常用方法总结
- TextView设置android:ellipsize="marquee"属性,无法实现跑马灯效果的解决方法
- 设置Webview的滚动条属性- 滚动条白边解决方法
- android文本组件textView属性autolink设置为web,显示网址的处理方法
- Android使用TextView,设置onClick属性无效的解决方法
- android中webview携带cookie以及webview所加载网页中js调用java方法问题
- Android之WebView——解决加载Https以及根据网页动态设置WebView高度等难题
- webView的基本属性设置以及遇到的一些坑
- Android WebView问题汇总以及解决方法
- Android 在onActivityResult()中设置图片setImageResource(resId) 或者改变view属性,不成功的解决办法
- webview 中textarea设置斜体字体失效的解决方法
- Android的WebView的常用设置和方法
- Android登录Web以及登录保持和cookie的使用方法
- 浅谈Android Fragment嵌套使用存在的一些BUG以及解决方法