我正在开发必须加载和预览 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
)。所以,我可以成功恢复滚动进度。所有其他好主意都很好:)。
谢谢,