我目前在使用Android webview scrollTo功能时出现问题。我(它有时)正常工作,但是当我点击webview中的链接时,它有时会将屏幕重置为0,0位置。
继承我的代码。
public void onPageFinished(WebView webview, String Url) {
final WebView newView = webview;
if (ScrollX > 0) { // <-- int variable containing users Scroll position
newView.postDelayed(new Runnable() {
public void run() {
if (view.getScrollX() > 0) {
// ScrollX and ScrollY sometimes get reset before scrollTo happens, Why?
newView.scrollTo(ScrollX, ScrollY);
pageloaded = true;
} else {
newView.scrollTo(ScrollX, ScrollY);
newView.post(this);
}
}
}, 10);
}
}
所以这是最新进展的。在我的webview onPageFinished上,我将我的webviews滚动位置从默认的0,0更改为用户将其滚动位置设置为的任何内容。我使用webviews postDelayed来推迟事情,直到webview完全加载。每隔10毫秒我的postDelayed检查webview视图是否getScrollX()返回一些&gt; 0(表示已加载webview)。如果是这样,它将更改代码的webview滚动位置部分,并最终确定已加载webview。如果没有,则在尝试设置webviews滚动位置后,代码将重新运行。这样下一步,我的if语句可以评估为true并避免重新运行代码部分。
现在这是问题,当我使用view.getScrollX()&gt; 0确定是否已加载webview,它工作正常。但有时候,view.getScrollX()&gt; 0将评估为true。但是当我使用webview scrollTo函数时,我的ScrollX和ScrollY变量在scrollTo之前被重置,或者在scrollTo使用期间,webview只返回到0,0。怎么回事?
答案 0 :(得分:1)
嗯,我意识到发生了什么。即使webview.getScrollX()正式开始具有值,webview有时也不会完全加载。所以经过一些调整后,我想出了这个......
public void onPageFinished(WebView webview, String Url) {
final WebView newView = webview;
if (ScrollX > 0) { // <-- int variable containing users Scroll position
newView.postDelayed(new Runnable() {
public void run() {
if (newView.getProgress() == 100) {
newView.postDelayed(new Runnable() {
public void run() {
newView.scrollTo(ScrollX, ScrollY);
pageloaded = true;
}
}, 10);
} else {
newView.post(this);
}
}
}, 10);
}
}
现在这段代码是一种美。 Soooo,我正在检查webview进度是否达到了100%,如果没有,我会回到runnable。然后,当我的webview被100%加载时,我添加了一个postDelayed,因为即使webview加载了100%,它仍然有很小的机会没有被完全加载lol。因此webview后100ms的额外10ms应该是最后的技巧。自实施此更新以来,我没有重置一次滚动位置。而且我也没有接受过和以前一样多的闪烁。它的速度与没有使用自定义默认值的webview加载一样快。