在我的应用程序中,我在按钮单击时设置应用程序的方向,使用setRequestedOrientation()
,我的应用程序有一个显示本地网页的webview。
我正在使用下面链接中提到的解决方案,以便在方向更改时停止重新加载页面 http://www.devahead.com/blog/2012/01/preserving-the-state-of-an-android-webview-on-screen-orientation-change/
唯一的区别是我的活动中没有onSaveInstanceState
和onRestoreInstanceState
。
在我的情况下发生的情况是,当我更改方向时我的网页视图不会重新加载,但它只是在更改方向时重新呈现UI。
它首先显示UI,然后显示白色空白屏幕几秒钟,然后再次显示UI。
我该如何解决它?
答案 0 :(得分:0)
曾几何时我使用了他们的实现,但是在阅读了Android文档后,我意识到他们的大部分代码都没有意义,因为注册配置更改(在清单中)意味着您的活动不会被破坏,因为它通常是。
长话短说,你不需要使用FrameLayout
作为webView的容器,你可能不需要onConfigurationChanged
等。如果我有时间,我会发布一些代码作为一个例子。
目前,请确保您的清单文件中包含以下内容
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
而不是
android:configChanges="keyboard|keyboardHidden|orientation"
因为在定向更改设备上可能会获得screenSize更改
编辑这就是我所做的(从我的一个项目中略过,所以我可能错过了一些细节)
AndroidManifest.xml中的
<activity android:name=".Activities.WebWrapperActivity"
android:theme="@android:style/Theme.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"/>
web_wrapper_activity_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView android:id="@+id/web_wrapper_activity_web_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbarStyle="outsideOverlay"/>
</LinearLayout>
活动(或其中的一部分)
public class WebWrapperActivity extends Activity {
private WebView _webView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_wrapper_activity_layout);
init();
}
private void init() {
_webView = (WebView) findViewById(R.id.web_wrapper_activity_web_view);
_webView.setScrollbarFadingEnabled(true);
_webView.getSettings().setLoadsImagesAutomatically(true);
_webView.getSettings().setJavaScriptEnabled(true);
_webView.getSettings().setAllowFileAccess(true);
_webView.getSettings().setSavePassword(false);
_webView.getSettings().setPluginState(WebSettings.PluginState.ON);
_webView.loadUrl(“http://www.google.com”);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
_webView.saveState(outState);
}
}
正如我之前提到的,如果您的webView是活动中的唯一视图,则可能不需要onConfigurationChanged
。
如果您有任何问题,请告诉我