webView scrollTo 一直不工作
webView scrollTo not working all the time
我目前遇到 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);
}
}
这是怎么回事。在我的 webviews onPageFinished 上,我将我的 webviews 滚动位置从默认的 0,0 更改为用户将滚动位置设置为的任何位置。我使用 webviews postDelayed 来延迟事情,直到 webview 完全加载。我的 postDelayed 每 10 毫秒检查一次 webviews getScrollX() returns something > 0(意味着 webview 已加载)。如果是,它会更改代码的 webview 滚动位置部分,并最终确定 webview 已加载。如果没有,代码会在尝试设置 webviews 滚动位置后重新 运行。这样接下来,我的 if 语句可以评估为 true 并避免重新运行代码部分。
现在问题来了,当我使用view.getScrollX() > 0 来确定是否已加载webview 时,它工作正常。但有时,view.getScrollX() > 0 的计算结果为真。但是当我使用 webview scrollTo 函数时,我的 ScrollX 和 ScrollY 变量在 scrollTo 之前或在 scrollTo 使用期间被重置,并且 webview 只是返回到 0,0。这是怎么回事?
好吧,我意识到发生了什么。即使 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%,它仍然有很小的机会没有完全加载,哈哈。因此,webview 达到 100% 后的额外 10ms 应该可以完成最后的技巧。自从实施此更新以来,我还没有重置过一次滚动位置。而且我没有收到像以前一样多的闪烁。在不使用自定义默认值加载 webview 的情况下,它会尽可能快。
我目前遇到 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);
}
}
这是怎么回事。在我的 webviews onPageFinished 上,我将我的 webviews 滚动位置从默认的 0,0 更改为用户将滚动位置设置为的任何位置。我使用 webviews postDelayed 来延迟事情,直到 webview 完全加载。我的 postDelayed 每 10 毫秒检查一次 webviews getScrollX() returns something > 0(意味着 webview 已加载)。如果是,它会更改代码的 webview 滚动位置部分,并最终确定 webview 已加载。如果没有,代码会在尝试设置 webviews 滚动位置后重新 运行。这样接下来,我的 if 语句可以评估为 true 并避免重新运行代码部分。
现在问题来了,当我使用view.getScrollX() > 0 来确定是否已加载webview 时,它工作正常。但有时,view.getScrollX() > 0 的计算结果为真。但是当我使用 webview scrollTo 函数时,我的 ScrollX 和 ScrollY 变量在 scrollTo 之前或在 scrollTo 使用期间被重置,并且 webview 只是返回到 0,0。这是怎么回事?
好吧,我意识到发生了什么。即使 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%,它仍然有很小的机会没有完全加载,哈哈。因此,webview 达到 100% 后的额外 10ms 应该可以完成最后的技巧。自从实施此更新以来,我还没有重置过一次滚动位置。而且我没有收到像以前一样多的闪烁。在不使用自定义默认值加载 webview 的情况下,它会尽可能快。