java - webView的scrollTo始终不工作

标签 java android webview scrollto postdelayed

我目前遇到 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 完全加载。每 10 毫秒,我的 postDelayed 就会检查一下 webviews getScrollX() 是否返回 > 0 的内容(意味着 webview 已加载)。如果是这样,它会更改代码的 webview 滚动位置部分,并最终确定 webview 已加载。如果没有,代码会在尝试设置 webview 滚动位置后重新运行。这样,接下来,我的 if 语句可以计算为 true 并避免重新运行代码部分。

现在问题来了,当我使用 view.getScrollX() > 0 来确定 webview 是否已加载时,它工作正常。但有时,view.getScrollX() > 0 将计算为 true。但是当我使用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%,如果没有,我将循环回可运行状态。然后,当我的 webview 加载到 100% 时,我添加一个 postDelayed,因为即使 webview 加载到 100%,它仍然有很小的机会没有完全加载,哈哈。因此,在 webview 达到 100% 后额外的 10 毫秒应该能起到最后的作用。自从实现此更新以来,我的滚动位置没有重置过一次。而且我没有收到像以前那样多的闪烁。在没有使用自定义默认值加载 Web View 的情况下,它的速度是最快的。

关于java - webView的scrollTo始终不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28522879/

相关文章:

Android 尝试执行进程时出现 IO 异常

android - 如何使用 Android UiAutomation.injectInputEvent 注入(inject)点击事件

android - 什么是 gfe_rd=cr&ei= 以及为什么此 url 在 Android webView 中失败?

iOS UIWebView 限制

android - 打破阿拉伯语字体

Java - 在给定值的情况下查找数组的元素?

java - 使用倒计时器计算时间之间的月数

java - 在java中使用MessageFormat打印时出现问题

java - 如何在 Spring MVC 中填充下拉框

java - 将值从 MainActivity 传递到自定义 ListView 适配器类