首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android webView saveState

在 Android WebView 中使用 saveState() 方法可以将当前 WebView 的状态保存到 SharedPreferences 中,以便在下次打开时恢复。

具体实现步骤如下:

  1. 在 WebView 中获取 WebView 对象的引用。
代码语言:java
复制
WebView webView = findViewById(R.id.web_view);
  1. 在 Activity 或 Fragment 中定义一个 onSaveInstanceState() 方法,以便在 Activity 或 Fragment 销毁时保存 WebView 状态。
代码语言:java
复制
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    webView.saveState(savedInstanceState);
}
  1. saveState() 方法中保存 WebView 状态。
代码语言:java
复制
public void saveState(Bundle savedInstanceState) {
    savedInstanceState.putBoolean("isWebViewLoaded", true);
    savedInstanceState.putBoolean("isWebViewSet", true);
    savedInstanceState.putBoolean("isWebViewFocused", true);
    savedInstanceState.putBoolean("isWebViewVisible", true);
    savedInstanceState.putInt("webviewId", webView.getId());
    savedInstanceState.putString("url", webView.getUrl());
    savedInstanceState.putString("title", webView.getTitle());
    savedInstanceState.putString("user_agent", webView.getUserAgentString());
    savedInstanceState.putBoolean("isBackKeyEnabled", webView.isBackKeyEnabled());
    savedInstanceState.putBoolean("isForwardKeyEnabled", webView.isForwardKeyEnabled());
    savedInstanceState.putInt("scrollX", webView.getScrollX());
    savedInstanceState.putInt("scrollY", webView.getScrollY());
    savedInstanceState.putBoolean("isPageScaleEnabled", webView.isPageScaleEnabled());
    savedInstanceState.putBoolean("isTextZoomEnabled", webView.isTextZoomEnabled());
    savedInstanceState.putBoolean("isZoomEnabled", webView.isZoomEnabled());
    savedInstanceState.putBoolean("isSmoothScrolling", webView.isSmoothScrolling());
    savedInstanceState.putBoolean("isScrollEnabled", webView.isScrollEnabled());
    savedInstanceState.putBoolean("isLoadWithOverviewMode", webView.isLoadWithOverviewMode());
    savedInstanceState.putBoolean("isSupportZoom", webView.isSupportZoom());
    savedInstanceState.putBoolean("isDisplayZoomButton", webView.isDisplayZoomButton());
    savedInstanceState.putBoolean("isBuiltInZoomControls", webView.isBuiltInZoomControls());
    savedInstanceState.putBoolean("isDisplayZoomControls", webView.isDisplayZoomControls());
    savedInstanceState.putBoolean("isAlwaysDisplayScrollBars", webView.isAlwaysDisplayScrollBars());
    savedInstanceState.putBoolean("isAutoResize", webView.isAutoResize());
    savedInstanceState.putBoolean("isAutoSize", webView.isAutoSize());
    savedInstanceState.putBoolean("isFitWindow", webView.isFitWindow());
    savedInstanceState.putBoolean("isFullScreen", webView.isFullScreen());
    savedInstanceState.putBoolean("isShowNavigationBar", webView.isShowNavigationBar());
    savedInstanceState.putBoolean("isNavigationBarHidden", webView.isNavigationBarHidden());
    savedInstanceState.putBoolean("isScrollBarsEnabled", webView.isScrollBarsEnabled());
    savedInstanceState.putBoolean("isFocused", webView.isFocused());
    savedInstanceState.putBoolean("isWebViewLoaded", webView.isWebViewLoaded());
    savedInstanceState.putBoolean("isFirstLayout", true);
}
  1. onViewCreated() 方法中,从 savedInstanceState 中恢复数据。
代码语言:java
复制

@Override

public void onViewCreated(View view, Bundle savedInstanceState) {

代码语言:txt
复制
super.onViewCreated(view, savedInstanceState);
代码语言:txt
复制
if (savedInstanceState != null) {
代码语言:txt
复制
    isWebViewLoaded = savedInstanceState.getBoolean("isWebViewLoaded");
代码语言:txt
复制
    isWebViewSet = savedInstanceState.getBoolean("isWebViewSet");
代码语言:txt
复制
    isWebViewFocused = savedInstanceState.getBoolean("isWebViewFocused");
代码语言:txt
复制
    isWebViewVisible = savedInstanceState.getBoolean("isWebViewVisible");
代码语言:txt
复制
    webViewId = savedInstanceState.getInt("webviewId");
代码语言:txt
复制
    url = savedInstanceState.getString("url");
代码语言:txt
复制
    title = savedInstanceState.getString("title");
代码语言:txt
复制
    userAgent = savedInstanceState.getString("user_agent");
代码语言:txt
复制
    isBackKeyEnabled = savedInstanceState.getBoolean("isBackKeyEnabled");
代码语言:txt
复制
    isForwardKeyEnabled = savedInstanceState.getBoolean("isForwardKeyEnabled");
代码语言:txt
复制
    scrollX = savedInstanceState.getInt("scrollX");
代码语言:txt
复制
    scrollY = savedInstanceState.getInt("scrollY");
代码语言:txt
复制
    isPageScaleEnabled = savedInstanceState.getBoolean("isPageScaleEnabled");
代码语言:txt
复制
    isTextZoomEnabled = savedInstanceState.getBoolean("isTextZoomEnabled");
代码语言:txt
复制
    isZoomEnabled = savedInstanceState.getBoolean("isZoomEnabled");
代码语言:txt
复制
    isSmoothScrolling
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android WebView 调试方法

调试Android WebView中的h5页面,通常就是通过alert和抓包工具来定位问题,效率低且无法直接调试样式或打断点,可谓是事倍功半。...本文介绍一下我在项目中使用的新方法,能够通过chrome的开发工具在原生 Android 应用中调试 WebView。...前提条件: Android4.4+ 基本原理: 1.在APP中启用 WebView 调试,开启调试后,Chrome DevTools才能对WebView进行远程调试; WebView.setWebContentsDebuggingEnabled...使用场景 1.测试包 如果团队中有Android开发人员能够提供测试包,只要在测试包中开启Webview的debug模式就可以了。...目前Xposed的官网上给出的链接是这样的: Android5.0+:https://forum.xda-developers.com/attachment.php Android4.0.4-4.4.4

3.4K80

android WebView拦截请求详解

1 WebView基本用法 WebView的基本用法相信大多数android开发者都是会使用的,最简单的就是调用个loadUrl方法,但是记得要在清单文件中添加网络权限。...代码如是: mWebview = (WebView) findViewById(R.id.my_webview); mWebview.setWebViewClient(new WebViewClient...2 WebView拦截请求 WebView调用loadUrl后,会首先根据传入的URL获取响应,然后再将响应显示到页面上,这就是WebView的原理。...)方法中,该方法用于根据请求去获取响应,如果返回null,那么android会根据请求去获取响应并返回,但是如果你重写了该方法并返回了响应,那么WebView就会使用你的响应数据。...所以特地研究了WebView拦截请求,不过最好是先判断要加载的URL是否是需要拦截的,如果不是的话,可以依然交给WebView去实现。

3.9K10

Android应用界面开发——WebView

WebView组件本身就是一个浏览器实现,Android5.0增强的WebView基于Chromium M37,直接支持WebRTC、WebAudio、WebGL。...由于该应用需要访问互联网,所以需要在AndroidManifest.xml中配置: <uses-permission android:name="android.permission.INTERNET"...三.WebView中的JavaScript调用Android方法 ---- 在WebView中调用Android方法需要三步: 调用WebView关联的WebSettings的setJavaScriptEnabled...在JavaScript脚本中通过刚才暴露的name对象调用Android方法。 写一个在JavaScript中调用Android方法的实例,该实例界面包含一个WebView组件,用于显示HTML页面。...-- 注意此处的myObj是Android暴露出来的对象--> <input type="button" value="打招呼" onclick="myObj.showToast('<em>Android</em>

81530

Android APP之WebView校验SSL证书的方法

Android系统的碎片化很严重,并且手机日期不正确、手机根证书异常、com.google.android.webview BUG等各种原因,都会导致WebViewClient无法访问HTTPS站点。...请参考以下代码,原理是:如果webview报告SSL错误,程序将会对服务器证书进行强校验,如果服务器传入证书的指纹(sha256)与记录值一致,说明webview验证过程存在缺陷(如:手机日期错误、根证书被删除...webview.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view...76, -98, -19, -73, 91, -37, 18, 64, 32, -41, 0, 109 }; //证书指纹 Bundle bundle = SslCertificate.saveState...return Arrays.equals(key, MySSLCNSHA256); } catch (Exception Ex) {} } return false; } } 以上就是Android

4.7K10
领券