方向更改时将WebView位置恢复为相同内容(Android)

时间:2013-06-07 08:16:33

标签: android android-webview android-orientation

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

3 个答案:

答案 0 :(得分:2)

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

我现在正在使用以下方法:

  1. 在onSaveInstanceState中保存WebView的当前滚动位置:outState.putInt(EXTRA_SCROLL_POSITION, webView.getScrollY());
  2. 在onCreate中的
  3. ,从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;
            }
        }
    });
    
  4. 这很难看,但它对我有用(这不考虑当前的缩放级别等)。关于你可以改进的代码有很多,但它基本上可以解决问题。

答案 1 :(得分:1)

视图类具有onSaveInstanceState()方法,该方法返回ParcelableonRestoreInstanceState(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的位置到保存的状态。希望这有助于。