wake-up-neo.com

So zeigen Sie eine Statusleiste an, wenn WebView in Android eine URL lädt?

Ich bin neu in der Entwicklung von Android-Apps und lerne sie.

Ich habe eine Anwendung entwickelt, die einen Website-Link mit einer WebView lädt. Und es funktioniert gut.

Ich habe jedoch Probleme beim Anzeigen und Ausblenden der Fortschrittsleiste, wenn die WebView eine Seite lädt.

Ich möchte eine Fortschrittsleiste anzeigen (Nur Spinner in der Mitte), wenn der WebView den Hauptlink und die internen Links einer Website lädt, und die Fortschrittsleiste ausblenden, wenn die Seite vollständig geladen ist.

Mein Java-Code:

package in.matebook.myapplication;

import Android.app.Activity;
import Android.content.Intent;
import Android.net.Uri;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.webkit.WebSettings;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView myWebView = (WebView) findViewById(R.id.webView);
        myWebView.setWebViewClient(new MyWebViewClient());
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.loadUrl("http://www.labnol.org");
    }



    private class MyWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            if (Uri.parse(url).getHost().equals("www.labnol.org")) {
                // This is my web site, so do not override; let my WebView load the page
                //or we can add more allowed Host in if condition
                return false;
            }
            // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }


    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return false;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Und mein Layout-XML-Code:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".MainActivity">


    <WebView  xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/webView"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        />

    <ProgressBar
        Android:id="@+id/progressBar"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleLarge"
        Android:layout_centerVertical="true"
        Android:layout_centerHorizontal="true" />

</RelativeLayout>

Im Moment wird der Fortschrittsbalken angezeigt, aber nicht ausgeblendet.

Wenn ich ein progressbar -Objekt erstelle und im Java-Code unterhalb der Zeile hinzufüge, wird die Fortschrittsleiste nicht angezeigt.

progressbar.setVisibility(View.GONE);

Ich habe auch eine andere Antwort ausprobiert , aber die Fortschrittsanzeige funktioniert nicht, wenn ich auf interne Links klicke.

  1. Ich möchte die Fortschrittsleiste anzeigen, wenn die Hauptseite geladen wird, und die Fortschrittsleiste ausblenden, wenn die Hauptseite vollständig geladen ist.

  2. Ich möchte die Fortschrittsleiste erneut anzeigen, wenn der Benutzer auf interne Links der Website klickt. Die Fortschrittsleiste wird wie oben ausgeblendet, wenn die Seite vollständig geladen ist.

Bitte helfen Sie, ich bin Anfänger in der Entwicklung von Android-Apps.

9
Rinku

probieren Sie diesen Code aus ... Sie benötigen den webChoromeClient, um den Ladevorgang der Webansicht zu verfolgen ...

webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
    progressBar.setProgress(progress);
    if (progress == 100) {
        progressBar.setVisibility(View.GONE);

    } else {
        progressBar.setVisibility(View.VISIBLE);

    }
 }
});

Ersetzen Sie Ihren Webview-Client durch diesen Code ....

private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
   }
}
25
Rishad Appat

Garantierte Lösung:

        webView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageCommitVisible(WebView view, String url) {
            super.onPageCommitVisible(view, url);
            mProgressBar.setVisibility(View.INVISIBLE);
        }
    });
3
Ronit Mankad

Falls jemand nach einer Kotlin -Lösung sucht, hat diese einfache Lösung für mich funktioniert:

private fun setupWebView() {

    val webViewClient: WebViewClient = object: WebViewClient() {

        override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
            view?.loadUrl(request?.url.toString())
            return super.shouldOverrideUrlLoading(view, request)
        }

        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
            showProgressDialog()
            super.onPageStarted(view, url, favicon)
        }

        override fun onPageFinished(view: WebView?, url: String?) {
            hideProgressDialog()
            super.onPageFinished(view, url)
        }
    }
    webView.webViewClient = webViewClient

    webView.settings.javaScriptEnabled = true
    webView.settings.defaultTextEncodingName = "utf-8"
}
2

Hey Leute, ich habe diese Methode nützlich, das würde dir sicherlich auch helfen.

XML

<WebView
        Android:id="@+id/webid"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"/>

<ProgressBar
    Android:id="@+id/progress_bar"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerHorizontal="true"
    Android:layout_centerVertical="true" />

Java:

WebView webView = (WebView)findViewById(R.id.webid);
WebSettings websettings = webView.getSettings();

webSettings.setJavaScriptEnabled(true);
webSettings.setGeolocationEnabled(true);
webSettings.setSupportMultipleWindows(true);


webView.setWebViewClient(new WebViewClient(){

    public void onPageFinished(WebView view,String url){
       ProgressBar progressbar = (ProgressBar) findViewById(R.id.progress_bar);
       progressbar.setVisibility(View.GONE);
       }
});
0
Mac Dilshad

Ich habe folgendes zu meinem Code hinzugefügt und es hat sehr gut für mich funktioniert.

XML:  

   <WebView
    Android:id="@+id/updates_webview"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"  />

   <ProgressBar
    Android:id="@+id/progressBar"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    style="?android:attr/progressBarStyleLarge"
    Android:layout_centerVertical="true"
    Android:layout_centerHorizontal="true" />

Java:

public class HelloWebViewClient extends WebViewClient {
    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);
        ProgressBar progressBar =  findViewById(R.id.progressBar1);
        progressBar.setVisibility(View.GONE);
    }
}
0
Harshil Shah