在Android中的WebView中加载大型TEXT文件

时间:2014-06-25 07:50:50

标签: android android-webview android-browser android-websettings

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

另外,当用户旋转屏幕(或)导航远离活动时,我想保留scrollprogress。所以,我将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)完成它的工作原理。但是,文本没有显示几秒钟,当它最终显示时,滚动progess没有恢复,而是从开始显示该文件。我认为,这是因为WebView需要加载这些大文件的额外几秒钟。 我的问题是,如果有任何其他方式让我知道文本将在WebView中显示大小的确切时刻(类似onPageFinished)。所以,我可以成功恢复滚动进度。 所有其他好的想法都很好::)。

谢谢,

1 个答案:

答案 0 :(得分:0)

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