我面临着WebView
内容滚动位置的问题,这里是:我在纵向模式下在某种程度上压低页面,当我将方向更改为横向时,滚动向上或向下移动。它没有显示纵向模式中的确切内容。我确实尝试在清单文件中进行更改configChanges="keyboardHidden|orientation|screenSize"
,但没有运气。我确实覆盖了onConfigurationChanged()
但是没有用。我在question中实现了接受的答案,但没有用。有人可以建议必须做什么,为什么不起作用?这适用于Google Nexus Tab,最低要求的SDK版本为14。
谢谢大家。
答案 0 :(得分:2)
我记得我的应用面临同样的问题。如果我没有弄错的话,菲尔建议的解决方案不起作用(在某些版本的Android上?)。
我现在正在使用以下方法:
outState.putInt(EXTRA_SCROLL_POSITION, webView.getScrollY());
,从savedInstanceState获取最后一个滚动位置并设置自定义WebViewClient:
setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (!scrolled) {
postDelayed(new Runnable() {
@Override
public void run() {
scrollBy(0, scroll);
}
}, 250);
scrolled = true;
}
}
});
这很难看,但它对我有用(这不考虑当前的缩放级别等)。关于你可以改进的代码有很多,但它基本上可以解决问题。
答案 1 :(得分:1)
视图类具有onSaveInstanceState()
方法,该方法返回Parcelable
和onRestoreInstanceState(Parcelable state)
方法以恢复状态。如果我没记错,保存的状态包括滚动位置。您需要做的就是保存您从片段的onSaveInstanceState()
方法中调用WebView的onSaveInstanceState
得到的Parcelable:
public void onSaveInstanceState(Bundle savedState) {
super.onSaveInstanceState(savedState);
WebView webView = (WebView) findViewById( ... );
savedState.putParcelable("myKey", webView.onSaveInstanceState());
}
然后在onCreateView
方法中恢复该状态(如果可用):
public View onCreateView (LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
WebView webView = (WebView) findViewById( ... );
Parcelable savedState = savedInstanceState.getParcelable("myKey");
if (savedState != null) {
webView.onRestoreInstanceState(savedState);
}
}
....
}
答案 2 :(得分:0)
尝试使用 onSaveInstanceState 来保存状态的scrollview 和恢复onRestoreInstanceState 方法。您是否使用过Scrollview thr xml ?如果是然后获取参考到该视图,当活动恢复然后设置scrollview的位置到保存的状态。希望这有助于。