Barre de progression Android WebView

j'ai regardé une question similaire à cette ici mais comme je suis un internaute novice quelqu'un pourrait-il expliquer comment faire pour que cela fonctionne dans un WebView ou au moins comment configurer un délai de 10 secondes pour que les gens sachent que c'est le chargement?

59
demandé sur Community 2010-03-29 15:23:44

8 réponses

pour une barre de progression horizontale, vous devez d'abord définir votre barre de progression et la relier à votre fichier XML comme ceci, dans le onCreate :

final TextView txtview = (TextView)findViewById(R.id.tV1);
final ProgressBar pbar = (ProgressBar) findViewById(R.id.pB1);

ensuite, vous pouvez utiliser la méthode onProgressChanged dans votre WebChromeClient:

MyView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
               if(progress < 100 && pbar.getVisibility() == ProgressBar.GONE){
                   pbar.setVisibility(ProgressBar.VISIBLE);
                   txtview.setVisibility(View.VISIBLE);
               }

               pbar.setProgress(progress);
               if(progress == 100) {
                   pbar.setVisibility(ProgressBar.GONE);
                   txtview.setVisibility(View.GONE);
               }
            }
        });

après cela, dans votre mise en page vous avez quelque chose comme ceci

<TextView android:text="Loading, . . ." 
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:id="@+id/tV1" android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:textColor="#000000"></TextView>

<ProgressBar android:id="@+id/pB1"
    style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:layout_centerVertical="true"
    android:padding="2dip">
</ProgressBar>

C'est comme ça que je l'ai fait dans mon application.

116
répondu Yahyaotaif 2017-10-22 02:17:05

je viens de trouver un très bon exemple de comment faire ici: http://developer.android.com/reference/android/webkit/WebView.html . Vous avez juste besoin de changer le setprogress de:

activity.setProgress(progress * 1000);

à

activity.setProgress(progress * 100);
21
répondu Max Marroni 2010-03-29 12:40:58

voici la façon la plus facile d'ajouter la barre de progrès dans android Web View.

Ajouter un champ booléen dans votre activité / fragment

private boolean isRedirected;

ce booléen empêchera la redirection de pages web cause de liens morts.Vous pouvez maintenant passer votre objet WebView et votre Url web dans cette méthode.

private void startWebView(WebView webView,String url) {

    webView.setWebViewClient(new WebViewClient() {
        ProgressDialog progressDialog;

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

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

        public void onLoadResource (WebView view, String url) {
            if (!isRedirected) {
                if (progressDialog == null) {
                    progressDialog = new ProgressDialog(SponceredDetailsActivity.this);
                    progressDialog.setMessage("Loading...");
                    progressDialog.show();
                }
            }

        }
        public void onPageFinished(WebView view, String url) {
            try{
                isRedirected=true;

                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                    progressDialog = null;
                }



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

    });

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

ici quand commencer le chargement il appellera onPageStarted . Ici, je place le champ booléen est faux. Mais quand la page se charge terminer il viendra à la méthode onPageFinished et ici le champ booléen est mis à vrai. Parfois, si l'url est morte, elle sera redirigée vers la méthode onLoadResource() avant onPageFinished . Pour cette raison, il ne cachera pas la barre de progression. Pour éviter cela, je vérifie if (!isRedirected) dans onLoadResource()

dans la méthode onPageFinished() avant de rejeter la boîte de dialogue Progression, vous pouvez écrire votre code de retard de 10 Secondes

C'est ça. Codage heureux :)

9
répondu Md. Sajedul Karim 2016-03-21 15:42:34

c'est vrai, il y a aussi des options plus complètes, comme changer le nom de l'application pour une phrase que vous voulez.

http://www.firstdroid.com/2010/08/04/adding-progress-bar-on-webview-android-tutorials /

dans ce tutoriel, vous avez un exemple complet Comment utiliser la barre de progression dans une application webview.

Adrian.

4
répondu Adrian Zelezniak 2010-08-04 10:07:28

selon Md. Sajedul Karim réponse j'en ai écrit une semblable.

webView = (WebView) view.findViewById(R.id.web);
progressBar = (ProgressBar) view.findViewById(R.id.progress);
webView.setWebChromeClient(new WebChromeClient());

setProgressBarVisibility(View.VISIBLE);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        setProgressBarVisibility(View.VISIBLE);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        setProgressBarVisibility(View.GONE);
    }

    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        Toast.makeText(getActivity(), "Cannot load page", Toast.LENGTH_SHORT).show();
        setProgressBarVisibility(View.GONE);
    }
});

webView.loadUrl(url);

private void setProgressBarVisibility(int visibility) {
    // If a user returns back, a NPE may occur if WebView is still loading a page and then tries to hide a ProgressBar.
    if (progressBar != null) {
        progressBar.setVisibility(visibility);
    }
}
2
répondu CoolMind 2018-07-20 15:32:35

C'est comme ça que je l'ai fait avec Kotlin pour montrer les progrès en pourcentage.

ma disposition de fragment.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         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"/>

<ProgressBar
    android:layout_marginLeft="32dp"
    android:layout_marginRight="32dp"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:id="@+id/progressBar"/>
</FrameLayout>

mon fragment de kotlin dans onViewCreated

    progressBar.max = 100;
    webView.webChromeClient = object : WebChromeClient() {
        override fun onProgressChanged(view: WebView?, newProgress: Int) {
            super.onProgressChanged(view, newProgress)
            progressBar.progress = newProgress;
        }
    }

    webView!!.webViewClient = object : WebViewClient() {

        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
            progressBar.visibility = View.VISIBLE
            progressBar.progress = 0;
            super.onPageStarted(view, url, favicon)
        }

        override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
            view?.loadUrl(url)
            return true
        }

        override fun shouldOverrideUrlLoading(
            view: WebView?,
            request: WebResourceRequest?): Boolean {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                view?.loadUrl(request?.url.toString())
            }
            return true
        }

        override fun onPageFinished(view: WebView?, url: String?) {
            super.onPageFinished(view, url)
            progressBar.visibility = View.GONE
        }
    }

    webView.loadUrl(url)
0
répondu ninjahoahong 2018-07-16 13:46:42

attendre la fin du processus ...

while(webview.getProgress()< 100){}
progressBar.setVisibility(View.GONE);
-1
répondu idan 2013-04-18 07:03:56
         webview= (WebView) findViewById(R.id.web);
         webview.setWebChromeClient(new WebChromeClient() 
         {
          public void onProgressChanged(WebView view, int progress)   
             {
                 WebActivity .setTitle("Loading...");
                 WebActivity .setProgress(progress * 100); 
                 if(progress == 100)
                 WebActivity .setTitle(R.string.app_name);
       }
     });
 webview.setWebViewClient(new WebViewClient());
 webview.getSettings().setJavaScriptEnabled(true);
 webview.loadUrl("http://google.com");

pour plus de référence Cliquez ici http://androiddhina.blogspot.in/2015/05/android-load-webview-with-progressbar.html

-1
répondu Dhina k 2015-05-27 04:50:27