2016-08-22 91 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); 
}