我正在制作自己的浏览器而且需要帮助。我试图挽救它的状态。我已经尝试了以下方法,但不是我正在寻找的解决方案。
我试过这个:
<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 :(得分:1)
您应该将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);
}
答案 1 :(得分:0)
我正在使用
<activity
android:name="XYZ.activity.your.browser.activity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
android:windowSoftInputMode="adjustPan"/>
在我的AndroidManifest.xml文件中,它运行得很好。没有调整大小的问题。
我不会在常规活动中推荐这个,但是如果你只有一个WebView,一个工具栏和几个按钮,那么这应该没问题。
答案 2 :(得分: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);
}
答案 3 :(得分:0)
第一步
<activity android:name=".MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
第二步
if (savedInstanceState != null)
{ ((WebView) findViewById(R.id.webView)).restoreState(savedInstanceState.getBundle("webViewState"));}
else {
wv1=(WebView)findViewById(R.id.webView);
load(); // create seprate functin to loadweb
}
第三步
public void load() {
wv1=(WebView)findViewById(R.id.webView);
wv1.setWebViewClient(new MyBrowser());
wv1.getSettings().setLoadsImagesAutomatically(true);
wv1.getSettings().setJavaScriptEnabled(true);
wv1.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wv1.loadUrl("http://citynsr.ueuo.com/");
}
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
第四步
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Bundle bundle = new Bundle();
wv1.saveState(bundle);
outState.putBundle("webViewState", bundle);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
Bundle bundle = new Bundle();
wv1.saveState(bundle);
state.putBundle("webViewState", bundle);
}