0

我正在开发必须加载和预览 TXT 文件的应用程序。为此,我决定使用 WebView 而不是 TextView 作为那些 TXT 文件。我想预览超过 50000 行。所以,我认为使用 WebView 会更容易。

另外,当用户旋转屏幕(或)导航离开活动时,我想保留滚动进度。因此,我将 WebViewClient 实现为以下代码:

private class MyWebViewClient extends WebViewClient {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public void onPageFinished(WebView view, String url) {

        super.onPageFinished(view, url);
        view.postDelayed(new Runnable() {
            @Override
            public void run() {
                float webviewsize = mWebView.getContentHeight()
                        - mWebView.getTop();
                float positionInWV = webviewsize * mProgressToRestore;
                int positionY = Math.round(mWebView.getTop() + positionInWV);
                mWebView.scrollTo(0, positionY);
                mConfigurationHasChanged = false;
            }
            // Delay the scrollTo to make it work
        }, 150);

    }
}

这适用于较小的文件(最多 3000-5000 行文本)。但是在较大的文件中出现问题。

该方法public void onPageStarted(WebView view, String url, Bitmap favicon)完成它的工作。但是,文本没有显示几秒钟,当它最终显示时,滚动进程没有恢复,而不是从一开始就显示该文件。我推测,这是因为 WebView 需要额外的几秒钟来加载这些大文件。我的问题是,是否有任何其他方法可以让我知道文本将在 WebView 中显示大小的确切时间(类似于onPageFinished)。所以,我可以成功恢复滚动进度。所有其他好主意都很好:)。

谢谢,

4

1 回答 1

0

onPageStarted/onPageFinished仅告诉您何时完成从网络加载数据,而不是页面实际显示在屏幕上的时间。要确定何时是滚动的“正确”时刻,请在此处查看我的答案:https ://stackoverflow.com/a/21095453/2977376

于 2014-07-07T17:41:08.603 回答