【问题标题】:How to prevent Webview scroll up when data finished loading in android当数据在android中完成加载时如何防止Webview向上滚动
【发布时间】:2015-11-26 22:12:21
【问题描述】:

我想知道如何防止 webview 在完成从任何 url 加载数据时向上滚动。例如,我在 webview 中从 http://stackoverflow.com 加载数据,当数据加载(静止图像未完成加载)时,我向下滚动以查看 webview 中的文本。突然,Webview 自动向上滚动,因为数据已完成加载。那么,如何解决这个问题。

P/S:我有一个禁用 webview 滚动的方法,然后我将滚动视图放在 webview 之外,这样我就可以解决我的问题。但是我有一个新问题,当数据发生变化时,当我向下滚动到屏幕末尾时,webview 或滚动视图的高度(我认为滚动视图的高度)不会改变。它使我的应用程序在底部有很大的空间。我无法修复它。

【问题讨论】:

  • 也许你可以使用进度条来阻止用户在页面加载完成之前与 webview 交互。
  • 非常感谢。但是当使用进度对话框时让人觉得我的应用程序很慢。在我看来,页面文本完成加载,而图像仍在加载。如果使用进度对话框,人们必须等待图像加载完成,并且需要很长时间。我认为人们可以在等待图像完成时先阅读文本。所以进度对话框无法解决我的问题。

标签: android webview scrollview


【解决方案1】:

也许您可以使用onScrollChanged() 跟踪您的 WebView 滚动位置

当页面加载完毕,你可以scrollTo()

public void onPageFinished(WebView view, String url) {
    // scroll to the stored position. 
}

顺便说一句,在我测试过您的用例的几台设备上,这是非复制的。您的代码可能有问题。

【讨论】:

  • 感谢 Reno,这是完美的方法。
【解决方案2】:

我使用进度条作为RelativeLayout,而不是ProgressBar,然后在onPageStarted() 方法中将其点击监听器设置为null。 这是我对您的问题的有效解决方案:

private class MyBrowser extends WebViewClient {
    final RelativeLayout progressBar = (RelativeLayout) findViewById(R.id.progressBarLayout);

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        progressBar.setOnClickListener(null);
        progressBar.setVisibility(View.VISIBLE);
    }

    public void onPageFinished(WebView view, String url) {
        progressBar.setVisibility(View.GONE);
    }
}

这里是相关的 XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <RelativeLayout
        android:id="@+id/progressBarLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" >

        <ProgressBar
            style="?android:attr/progressBarStyleLarge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" />
    </RelativeLayout>
</RelativeLayout>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 2019-07-05
    • 1970-01-01
    相关资源
    最近更新 更多