Показывать индикатор выполнения на дочерней вкладке, пока не загрузится WebView - PullRequest
5 голосов
/ 23 марта 2010

В приложении Android я использую TabView, и на одной из вкладок отображается WebView. Но страница пуста, пока веб-страница не загрузится. Как можно показать индикатор выполнения, пока страница не загрузится? Он не может быть в строке заголовка, поскольку он скрыт хостом вкладок.

Ответы [ 4 ]

17 голосов
/ 02 декабря 2011

Я использую ProgressBar для этого.С таким макетом:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout [...]>

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

  <ProgressBar 
       android:id="@+id/ProgressBar"
       android:layout_centerInParent="true"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       style="?android:attr/progressBarStyleLarge"
       android:visibility="gone"/>
</RelativeLayout>

Я скрываю и показываю индикатор прогресса, используя:

 WebView webView = (WebView) findViewById(R.id.WebView);

 final ProgressBar progess = (ProgressBar) findViewById(R.id.ProgressBar);

  webView.setWebViewClient(new WebViewClient() {
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
    progess.setVisibility(View.VISIBLE);
  }

  public void onPageFinished(WebView view, String url) {
    progess.setVisibility(View.GONE);
  }
}
2 голосов
/ 02 сентября 2010

Если ваш вопрос «как узнать, когда страница загружена?», То:

Создайте пользовательский подкласс WebViewClient, переопределяя onPageFinished ()

Присоедините экземплярваш подкласс WebViewClient для вашего WebView через setWebViewClient ()

Установить индикатор неопределенного прогресса (панель, диалог, RotateAnimation и т. д.)

progressDialog = ProgressDialog.show(this, "", getText(R.string.progressDialogText), true);

перед вызовом loadUrl () в WebView

У onPageFinished () избавиться от индикатора прогресса (progressDialog.dismiss ())

2 голосов
/ 23 марта 2010

На сайте для разработчиков Android есть действительно хорошее руководство. В нем показано, как создать диалоговое окно прогресса «вращающееся колесо», используемое во всех программах Android, и даже некоторые основные сведения о том, как обрабатывать загрузку в отдельном потоке, чтобы предотвратить зависание приложения во время загрузки.

1 голос
/ 21 марта 2016

После инициализации вашего представления просто вызовите этот метод

startWebView(web_view,"Your Url"); Здесь web_view - ваш инициализированный объект WebView.startWebView() приведено ниже:

    private void startWebView(WebView webView,String url) {
 webView.setWebViewClient(new WebViewClient() {
            ProgressDialog progressDialog;

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

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            public void onLoadResource (WebView view, String url) {

                    if (progressDialog == null) {
                        progressDialog = new ProgressDialog(SponceredDetailsActivity.this);
                        progressDialog.setMessage("Loading...");
                        progressDialog.show();
                    }

            }
            public void onPageFinished(WebView view, String url) {
                try{
                    if (progressDialog.isShowing()) {
                        progressDialog.dismiss();
                        progressDialog = null;
                    }

                }catch(Exception exception){
                    exception.printStackTrace();
                }
            }

        });

        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(url);
    }

Иногда, если URL не работает, он будет перенаправлен и попадет в onLoadResource () перед методом onPageFinishedПо этой причине прогресс бар не будет уволен.Чтобы решить эту проблему см. мой ответ .

Спасибо:)

...