8

我面临WebView内容滚动位置的问题,这里是:我在纵向模式下将页面向下滑动到一定程度,当我将方向更改为横向时,滚动向上或向下移动。它不显示纵向模式下的确切内容。我确实尝试过在清单文件中进行更改,configChanges="keyboardHidden|orientation|screenSize"但没有运气。我确实覆盖onConfigurationChanged()了,但这没有用。我在这个问题中实现了公认的答案,但没有用。有人可以建议必须做什么,为什么它不起作用?这适用于 Google Nexus Tab,所需的最低 SDK 版本为 14。谢谢大家。

4

3 回答 3

5

我记得我的应用程序面临同样的问题。如果我没记错的话,Phil 建议的解决方案不起作用(在某些版本的 Android 上?)。

我现在使用以下方法:

  1. 在 onSaveInstanceState 中保存 WebView 当前的滚动位置:outState.putInt(EXTRA_SCROLL_POSITION, webView.getScrollY());
  2. 在 onCreate 中,从 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;
            }
        }
    });
    

这很难看,但对我来说有点用(这不考虑当前的缩放级别等)。该代码有很多可以改进的地方,但它基本上可以解决问题。

于 2013-06-15T20:50:21.833 回答
2

视图类有一个onSaveInstanceState()返回 a的方法Parcelable和一个onRestoreInstanceState(Parcelable state)恢复状态的方法。如果我没记错的话,保存的状态包括滚动位置。您需要做的就是onSaveInstanceState()在片段的onSaveInstanceState方法中保存通过调用 WebView 获得的 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);
        }
    }

    ....

}
于 2013-06-13T14:44:05.000 回答
0

尝试使用onSaveInstanceState来保存滚动视图的状态并在 onRestoreInstanceState方法中恢复。您是否使用过 Scrollview thr xml?如果,则获取对该视图的引用,当活动恢复时,将滚动视图的位置设置为已保存状态。希望有帮助。

于 2013-06-15T11:30:54.087 回答