Ich habe bei einer Frage ähnlich wie dies sehe hier aber als ich ein Neuling bin könnte jemand erklären , wie dies in einem WebView zur Arbeit kommen oder zumindest wie eine 10 Sekunden Zeitverzögerung einstellen , damit die Leute wissen , dass es den Laden?
android
progress-bar
webview
Max Marroni
quelle
quelle
Antworten:
Für einen horizontalen Fortschrittsbalken müssen Sie zuerst Ihren Fortschrittsbalken definieren und ihn wie folgt mit Ihrer XML-Datei verknüpfen
onCreate
:final TextView txtview = (TextView)findViewById(R.id.tV1); final ProgressBar pbar = (ProgressBar) findViewById(R.id.pB1);
Anschließend können Sie die onProgressChanged-Methode in Ihrem WebChromeClient verwenden:
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); } } });
Danach haben Sie in Ihrem Layout so etwas
<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>
So habe ich es in meiner App gemacht.
quelle
Ich habe gerade ein wirklich gutes Beispiel dafür gefunden: http://developer.android.com/reference/android/webkit/WebView.html . Sie müssen nur den Setprogress ändern von:
activity.setProgress(progress * 1000);
zu
activity.setProgress(progress * 100);
quelle
Hier ist der einfachste Weg, um Fortschrittsbalken in Android Web View hinzuzufügen.
Fügen Sie Ihrer Aktivität / Ihrem Fragment ein boolesches Feld hinzu
private boolean isRedirected;
Dieser Boolesche Wert verhindert die Umleitung von Webseiten aufgrund toter Links. Jetzt können Sie einfach Ihr WebView-Objekt und Ihre Web-URL an diese Methode übergeben.
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); }
Hier wird beim Start des Ladevorgangs aufgerufen
onPageStarted
. Hier setze ich Boolesches Feld ist falsch. Aber wenn das Laden der Seite beendet ist, kommt es zuronPageFinished
Methode und hier wird das Boolesche Feld auf true gesetzt. Manchmal, wenn die URL tot ist, wird sie umgeleitet und kommtonLoadResource()
vor deronPageFinished
Methode. Aus diesem Grund wird der Fortschrittsbalken nicht ausgeblendet. Um dies zu verhindern, checke ichif (!isRedirected)
einonLoadResource()
In der
onPageFinished()
Methode können Sie vor dem Schließen des Fortschrittsdialogs Ihren 10-Sekunden-Zeitverzögerungscode schreibenDas ist es. Viel Spaß beim Codieren :)
quelle
shouldOverrideUrlLoading
undonLoadResource
einen Fortschrittsstart verschobenonPageStarted
. Außerdem wurdeonReceivedError
dort eine Fortschritts- und Toastnachricht hinzugefügt und geschrieben.Laut der Antwort von Md. Sajedul Karim habe ich eine ähnliche geschrieben.
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); } }
quelle
Es ist wahr, es gibt auch vollständigere Optionen, wie das Ändern des Namens der App für einen gewünschten Satz. Überprüfen Sie dieses Tutorial, es kann helfen:
http://www.firstdroid.com/2010/08/04/adding-progress-bar-on-webview-android-tutorials/
In diesem Tutorial finden Sie ein vollständiges Beispiel für die Verwendung des Fortschrittsbalkens in einer Webview-App.
Adrian.
quelle
So habe ich es mit Kotlin gemacht, um Fortschritte in Prozent zu zeigen.
Mein Fragmentlayout.
<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>
Mein Kotlin-Fragment in 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)
quelle
Warten Sie, bis der Vorgang abgeschlossen ist ...
while(webview.getProgress()< 100){} progressBar.setVisibility(View.GONE);
quelle