如何在Android中加载数据时阻止Webview向上滚动

时间:2011-11-16 03:34:02

标签: android webview scrollview

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

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

2 个答案:

答案 0 :(得分:1)

也许您可以使用onScrollChanged()

跟踪WebView滚动位置

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

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

顺便说一下,在我测试过您的用例的几台设备上,这是Non-Repro。你的代码可能有问题。

答案 1 :(得分:1)

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

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>