我正在开发必须加载和预览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
)。所以,我可以成功恢复滚动进度。
所有其他好的想法都很好::)。
谢谢,
答案 0 :(得分:0)
onPageStarted
/ onPageFinished
只会告诉您何时从网络上加载数据,而不是在页面实际显示在屏幕上时。要确定何时滚动的“正确”时刻,请在此处查看我的答案:https://stackoverflow.com/a/21095453/2977376