Как предотвратить прокрутку Webview, когда данные закончили загрузку в Android - PullRequest
1 голос
/ 16 ноября 2011

Я хочу знать, как предотвратить прокрутку веб-просмотра при завершении загрузки данных из любого URL. Например, я загружаю данные из http://stackoverflow.com в свое веб-представление, и когда загрузка данных (неподвижное изображение не заканчивается), я прокручиваю вниз, чтобы просмотреть текст в веб-просмотре. Внезапно Webview автоматически прокручивается вверх, потому что данные заканчивают загрузку. Итак, как это исправить.

P / S: у меня есть метод, который отключает прокрутку веб-просмотра, затем я помещаю scrollview вне веб-просмотра, чтобы решить свою проблему. Но у меня возникла новая проблема, заключающаяся в том, что при изменении данных высота веб-просмотра или прокрутки (я думаю, высота просмотра прокрутки) не изменяется при прокрутке вниз до конца экрана. Это делает мое приложение большим пространством внизу. Я не могу это исправить.

Ответы [ 2 ]

1 голос
/ 26 ноября 2015

Я использовал индикатор выполнения как 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>
1 голос
/ 16 ноября 2011

Может быть, вы могли бы отслеживать положение прокрутки WebView, используя onScrollChanged()

А когда страница закончит загрузку, вы можете scrollTo()

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

Кстати, на нескольких устройствах, которые я тестировал ваш вариант использования, это Non-Repro.Это может быть что-то не так в вашем коде.

...