web-dev-qa-db-ja.com

Android WebViewプログレスバー

私はこれに似た質問を見ました ここ しかし、私は初心者なので、誰かがこれをWebViewで動作させる方法、または少なくとも10秒の遅延を設定して人々がそれを知る方法を説明できますロード中ですか?

66
Max Marroni

水平プログレスバーの場合、最初にプログレスバーを定義し、onCreateで次のようにXMLファイルとリンクする必要があります。

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

次に、WebChromeClientでonProgressChangedメソッドを使用できます。

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);
               }
            }
        });

その後、レイアウトに次のようなものがあります

<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>

これが私のアプリでのやり方です。

122
Yahyaotaif

ここでこれを行う方法の本当に良い例を見つけました: http://developer.Android.com/reference/Android/webkit/WebView.html setprogressを以下から変更するだけです:

activity.setProgress(progress * 1000);

activity.setProgress(progress * 100);
21
Max Marroni

Android Web Viewにプログレスバーを追加する最も簡単な方法を次に示します。

アクティビティ/フラグメントにブール値フィールドを追加します

_private boolean isRedirected;
_

このブール値は、リンク切れの原因となるWebページのリダイレクトを防ぎます。これで、WebViewオブジェクトとWeb Urlをこのメソッドに渡すことができます。

_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);
}
_

ここでロードを開始すると、onPageStartedが呼び出されます。ここで、ブール値フィールドの設定はfalseです。しかし、ページの読み込みが完了すると、onPageFinishedメソッドになり、ここでブール値フィールドがtrueに設定されます。 urlが無効な場合、リダイレクトされ、onPageFinishedメソッドの前にonLoadResource()に到達することがあります。このため、進行状況バーは非表示になりません。これを防ぐために、if (!isRedirected)onLoadResource()をチェックしています。

progress Dialogを閉じる前のonPageFinished()メソッドで、10秒の遅延コードを書くことができます

それでおしまい。ハッピーコーディング:)

9

Ms。Sajedul Karim answerによると、私は同じようなものを書きました。

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);
    }
}
7
CoolMind

確かに、必要な文のアプリの名前を変更するなど、より完全なオプションもあります。役立つこのチュートリアルを確認してください。

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

そのチュートリアルには、webviewアプリでプログレスバーを使用する方法の完全な例があります。

エイドリアン。

4

これは、Kotlinを使用して進捗率をパーセンテージで表示する方法です。

私のフラグメントのレイアウト。

<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>

OnViewCreatedのkotlinフラグメント

    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)
1
ninjahoahong