问题是旋转后的性能.WebView必须重新加载页面,这可能有点单调乏味.
每次处理方向更改而不从源重新加载页面的最佳方法是什么?
如果您不希望WebView在方向更改时重新加载,只需覆盖Activity类中的onConfigurationChanged:
@Override public void onConfigurationChanged(Configuration newConfig){ super.onConfigurationChanged(newConfig); }
并在清单中设置android:configChanges属性:
有关详细信息,请参阅:http:
//developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChangehttps://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges
这样做实际上是气馁的,正如之前多次提到的那样
我测试但发现不起作用,设置如下的configChanges属性将起作用.机器人:configChanges = "keyboardHidden |方向"
Matthias:这不是真的 - 请参阅Javadoc for WebView.
这样的`onConfigurationChanged`方法覆盖是没用的.
它正在研究android姜饼,但不适用于ICS
2> 小智..:编辑:此方法不再按照文档中的说明运行
原始答案:
这可以通过覆盖
onSaveInstanceState(Bundle outState)
您的活动并saveState
从Webview 调用来处理:protected void onSaveInstanceState(Bundle outState) { webView.saveState(outState); }然后在webview重新充气之后在你的onCreate中恢复它:
public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.blah); if (savedInstanceState != null) ((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState); }
这不适用于方向更改 - 显示空白屏幕.调用saveState\restoreState方法,但它没有帮助.
从saveState的文档:_请注意,此方法不再存储此WebView的显示数据.以前的行为可能会泄漏文件... _
"请注意,此方法不再存储此WebView的显示数据" - http://developer.android.com/reference/android/webkit/WebView.html
3> Tinashe..:最好的答案是遵循此处的 Android文档 基本上这将阻止Webview重新加载:
在活动中:
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } }
你不需要onConfigurationChanged()方法我很确定,只是Manifest中的附加属性.我的猜测是,WebView提供了对此的本机支持,这就是为什么这个答案现在是最好的答案(因为当最初询问这个问题时这不起作用)
4> Joe D'Andrea..:我尝试使用onRetainNonConfigurationInstance(返回WebView),然后在onCreate期间使用getLastNonConfigurationInstance将其恢复并重新分配它.
似乎还没有工作.我不禁想到我真的很亲密!到目前为止,我只是得到一个空白/白色背景WebView.在这里张贴希望有人可以帮助推动这一个超越终点线.
也许我不应该通过WebView.也许是WebView中的一个对象?
我尝试的另一种方法 - 不是我最喜欢的 - 是在活动中设置它:
android:configChanges="keyboardHidden|orientation"......然后在这里做什么都没有:
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // We do nothing here. We're only handling this to keep orientation // or keyboard hiding from causing the WebView activity to restart. }这有效,但它可能不被认为是最佳做法.
同时,我也有一个ImageView,我想根据轮换自动更新.事实证明这很容易.在我的
res
文件夹下,我拥有drawable-land
并drawable-port
保持横向/纵向变化,然后我R.drawable.myimagename
用于ImageView的源和Android"做正确的事" - 耶!...除非你观察配置更改,否则它不会.:(
所以我很不相干.使用onRetainNonConfigurationInstance和ImageView旋转工作,但WebView持久性不...或使用onConfigurationChanged并且WebView保持稳定,但ImageView不会更新.该怎么办?
最后一点:在我的情况下,强迫定位不是一个可接受的妥协.我们确实希望优雅地支持旋转.有点像Android浏览器应用程序的功能!;)
您不应该从onRetainNonConfigurationInstance返回任何视图.视图附加到活动上下文中,因此,如果您保存视图,则每次更改方向时都会带有所有行李.该观点被"泄露".(请参阅此处的最后一段:http://developer.android.com/resources/articles/faster-screen-orientation-change.html)onRetainNonConfigurationInstance的最佳实践是保存视图所需的数据,而不是视图本身.