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?
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.
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);
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 :)
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.
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);
}
}
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)
attendre la fin du processus ...
while(webview.getProgress()< 100){}
progressBar.setVisibility(View.GONE);
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