2

在我的应用程序中,我在 WebView 中加载了一个 HTML 页面。我正在实现一个 switchView 按钮,它加载相同的页面但使用不同的语言。我想在切换语言时保持 WebView 的滚动位置。在对 SO 进行了一些研究之后,我实现了以下内容。

这是第一个 WebView

        switchB = (Button)findViewById(R.id.button1);
        webView = (WebView) findViewById(R.id.page1);
        webView.loadUrl("file:///android_asset/try.html");

        switchB.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent mIntent = new Intent (MainActivity.this, SwitchedView.class);
                mIntent.putExtra("scroll", calculateProgression(webView));
                startActivity(mIntent);             
            }
        });
    }

private float calculateProgression(WebView content) {
        float positionTopView = content.getTop();
        float contentHeight = content.getContentHeight();
        float currentScrollPosition = content.getScrollY();
        float percentWebview = (currentScrollPosition - positionTopView) / contentHeight;
        return percentWebview;
    }

有了这个,我将 Scroll 传递给下一个 Activity,这是一个加载同一页面的 WebView。

        Intent i = getIntent();
        Bundle extras = i.getExtras();
        float scrollp = extras.getFloat("scroll");

        WebView webView = (WebView) findViewById(R.id.page2);
        webView.loadUrl("file:///android_asset/try2.html");

        float webviewsize = webView.getContentHeight() - webView.getTop();
        float positionInWV = webviewsize * scrollp;
        int positionY = Math.round(webView.getTop() + positionInWV);
        webView.scrollTo(0, positionY);

这不是将滚动位置设置为传递的滚动位置。难道我做错了什么?

4

1 回答 1

4

webView.loadUrl("file:///android_asset/try2.html"); 是异步的,所以 scrollTo 将在页面加载之前执行。所以你必须在页面加载成功后才调用 scrollTo。您可以通过以下代码段实现此目的。

webView.setWebViewClient(new WebViewClient() {
    @Override  
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
         webView.scrollTo(0, positionY);
    }  

    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
       //error
    }
});
于 2013-04-15T03:01:59.127 回答