Подтвердить что ты не робот

Панель прогресса Android WebView

Я рассмотрел вопрос, похожий на этот здесь, но поскольку я новичок, кто-то может объяснить, как заставить это работать в WebView или, по крайней мере, как установить 10-секундную задержку времени, чтобы люди знали, что она загружается?

4b9b3361

Ответ 1

Для горизонтального индикатора выполнения сначала необходимо определить индикатор выполнения и связать его с вашим XML файлом следующим образом: onCreate:

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

Затем вы можете использовать метод onProgressChanged в своем 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);
               }
            }
        });

После этого в вашем макете есть что-то вроде этого

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

Вот как я это сделал в своем приложении.

Ответ 2

Я только что нашел действительно хороший пример того, как это сделать здесь: http://developer.android.com/reference/android/webkit/WebView.html. Вам просто нужно изменить setprogress:

activity.setProgress(progress * 1000);

к

activity.setProgress(progress * 100);

Ответ 3

вот самый простой способ добавить индикатор выполнения в веб-представление Android.

Добавить логическое поле в вашей активности/фрагменте

private boolean isRedirected;

Это логическое значение предотвратит перенаправление веб-страниц из-за мертвых ссылок. Теперь вы можете просто передать объект WebView и веб-адрес 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, и здесь Boolean field устанавливается в true. Иногда, если URL-адрес мертв, он будет перенаправлен, и он достигнет onLoadResource() до onPageFinished. По этой причине он не будет скрывать индикатор выполнения. Чтобы предотвратить это, я проверяю if (!isRedirected) на onLoadResource()

в onPageFinished() перед тем, как отклонить Диалог Прогресса, вы можете написать свой 10-секундный код задержки

Что это. Счастливое кодирование:)

Ответ 4

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

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

В этом учебном пособии у вас есть полный пример использования панели progress в приложении webview.

Адриан.

Ответ 5

Согласно ответу госпожи Саджедул Карим, я написал аналогичный ответ.

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

Ответ 6

Привет, есть решение для этого, пожалуйста, посмотрите.

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

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
    super.onPageStarted(view, url, favicon);
    bar.setVisibility(View.VISIBLE);
    text1.setVisibility(View.VISIBLE);


}

Для полного примера индикатора выполнения Webview нажмите здесь

Ответ 7

Вот как я сделал это с 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

    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)

Ответ 8

Дождитесь завершения процесса...

while(webview.getProgress()< 100){}
progressBar.setVisibility(View.GONE);

Ответ 9

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

Подробнее см. здесь http://androiddhina.blogspot.in/2015/05/android-load-webview-with-progressbar.html