2016-08-22 94 views
0

我正在制作自己的浏览器,需要帮助。我试图挽救它的状态。我已经尝试了以下的事情,但不是我正在寻找的解决方案。在屏幕旋转上保存WebView状态

我已经试过这样:

<activity android:name=".About" 
    android:configChanges="orientation|keyboard|screenSize" /> 

但问题是,工具栏不调整,所以标题是小和工具栏的高度是最小的(如果我开始在横向和旋转为纵向)标题是大,高度更高(如果我开始肖像和旋转到风景)。

我尝试过其他的东西都是

@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.blah); 
    if (savedInstanceState != null) 
     ((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState.getBundle("webViewState"); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     Bundle bundle = new Bundle(); 
     webView.saveState(bundle); 
     outState.putBundle("webViewState", bundle); 
} 

但WebView中不正确保存。

如何在转动时保存webview状态并且没有工具栏大小问题?

如果我处理配置更改并尝试调整工具栏和文本大小,可能会更好吗?

谢谢!

+0

[Android的 - 在防止旋转的WebView重装]的可能的复制(http://stackoverflow.com/questions/12131025/android-preventing-webview-reload-on-rotate) – sumandas

+1

我没有发现这帖子。我会看看 –

回答

0

您应该将Webview状态保存到它自己的Bundle中。另外,请不要忘记拨打super.onSaveInstanceState(outState)

@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.blah); 
    if (savedInstanceState != null) 
     ((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState.getBundle("webViewState")); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     Bundle bundle = new Bundle(); 
     webView.saveState(bundle); 
     outState.putBundle("webViewState", bundle); 
} 
+0

不工作。它重新加载WebView。 –

0

我使用

<activity android:name="XYZ.activity.your.browser.activity" android:configChanges="orientation|screenSize|keyboardHidden|keyboard" android:windowSoftInputMode="adjustPan"/>

我的AndroidManifest.xml文件,它的工作原理就好内。没有调整大小的问题。

我不会在常规活动中推荐这个,但是如果你只有一个WebView,一个工具栏和几个按钮,那么这应该没问题。

+0

是的,但如果我在横向模式下开始活动,并且旋转到纵向,则工具栏标题太小,并且工具栏的高度比以纵向开始时的高度最小。 –

0

改进@EpicPandaForce答案和它的工作原理!

WebView webView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if (savedInstanceState != null) 
     ((WebView) findViewById(R.id.webView)).restoreState(savedInstanceState.getBundle("webViewState")); 
    else { 
     webView = (WebView) findViewById(R.id.webView); 
     webView.loadUrl("https://www.YAHOO.com/"); 
    } 

} 

protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    Bundle bundle = new Bundle(); 
    webView.saveState(bundle); 
    outState.putBundle("webViewState", bundle); 
}