How to add a progress/loading bar in WebView

后端 未结 5 2112
我寻月下人不归
我寻月下人不归 2020-12-18 06:25

I developed a website for my entreprisee and I work almost exclusively with PHP

So the Java language (and android studio) is a really new for me

Despite this

相关标签:
5条回答
  • 2020-12-18 06:47

    Try this i have make some changes in your code

    import android.support.v4.widget.SwipeRefreshLayout;
    import android.webkit.WebChromeClient;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.ProgressBar;
    import android.support.v7.widget.Toolbar;
    public class Main2Activity extends AppCompatActivity {
    
        WebView webView;
    
        SwipeRefreshLayout swipe;
        ProgressBar progressBar;
        Toolbar toolbar;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            progressBar = (ProgressBar) findViewById(R.id.awv_progressBar);
            swipe = (SwipeRefreshLayout) findViewById(R.id.swipe);
            LoadWeb();
    
            progressBar.setMax(100);
            progressBar.setProgress(1);
    
    
            swipe = (SwipeRefreshLayout) findViewById(R.id.swipe);
            swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    webView.reload();
                }
            });
    
            webView.setWebChromeClient(new WebChromeClient() {
                public void onProgressChanged(WebView view, int progress) {
    
    
                    progressBar.setProgress(progress);
                }
            });
    
            webView.setWebViewClient(new WebViewClient() {
    
    
                @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                progressBar.setVisibility(View.VISIBLE);
            }
    
    
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
    
                    webView.loadUrl("file:///android_asset/error.html");
                }
    
                public void onLoadResource(WebView view, String url) { //Doesn't work
                    //swipe.setRefreshing(true);
                }
    
                public void onPageFinished(WebView view, String url) {
    
                    //Hide the SwipeReefreshLayout
                    progressBar.setVisibility(View.GONE);
                    swipe.setRefreshing(false);
                }
    
            });
    
    
        }
    
        public void LoadWeb() {
    
            webView = (WebView) findViewById(R.id.webView);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.getSettings().setAppCacheEnabled(true);
            webView.loadUrl("https://www.google.com/");
            swipe.setRefreshing(true);
        }
    
        @Override
        public void onBackPressed() {
    
            if (webView.canGoBack()) {
                webView.goBack();
            } else {
                finish();
            }
        }
    
    }
    

    XML.LAYOUT

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/rel_parent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".Main2Activity">
    
    
    
        <ProgressBar
            android:id="@+id/awv_progressBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="15dp"
            android:layout_marginTop="7dp"
            android:indeterminate="true" />
    
    
        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipe"
            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" />
    
        </android.support.v4.widget.SwipeRefreshLayout>
    
    
    </LinearLayout>
    

    add this theme to your activity

    <style name="AppTheme3" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    

    OUTPUT

    0 讨论(0)
  • 2020-12-18 06:48

    You need to set ProgressBar over the WebView, take look my code I have did it.

    This is my activity_main.xml

    <?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
            android:id="@+id/webView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true" />
    
        <ProgressBar
            android:id="@+id/progressBar1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" />
    </RelativeLayout>
    

    In MainActivity.java I had handled ProgressBar show/hide functionality.

    MainActivity.java

       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            webview = findViewById(R.id.webView1);
            pbar =  findViewById(R.id.progressBar1);
            webview.setWebViewClient(new WebViewClient());
            webview.loadUrl("https://www.ndtv.com/");
        }
    
        public class WebViewClient extends android.webkit.WebViewClient {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
    
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
    
                /*** Hide ProgressBar while page completely load ***/
                pbar.setVisibility(View.GONE);
    
            }
    
        }
    

    Check a result,

    ProgressBar visible while page being load

    ProgressBar will hide while URL completely load

    0 讨论(0)
  • 2020-12-18 07:01

    This may help you.

    Inside WebViewClient:

      @Override
         public void onPageStarted(WebView view, String url, Bitmap favicon) {
    
          super.onPageStarted(view, url, favicon);
          findViewById(R.id.progress1).setVisibility(View.VISIBLE);
         }
    
        @Override
        public void onPageFinished(WebView view, String url) {
            findViewById(R.id.progress1).setVisibility(View.GONE);
        }
    

    In the XML add this :

    <ProgressBar
        android:id="@+id/progress1"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
    0 讨论(0)
  • 2020-12-18 07:07

    In XML File :-

    <ProgressBar
        android:id="@+id/mProgressBar"
        style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    

    In MainActivity :-

            webView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                mProgressBar.setProgress(newProgress);
            }
    
            webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String request)
            {
                webView.loadUrl(request);
                return true;
            }
            public void onPageFinished(WebView view, String url) {
                mProgressBar.setVisibility(View.GONE);
                super.onPageFinished(view, url);
            }
    

    Here you get the complete webview code. https://github.com/Talha609/Android-WebView-PDF-ProgressBar

    0 讨论(0)
  • 2020-12-18 07:10

    I think that you best option to do that, it's use Cordova. Include your web in there and compile it like an Android app.

    0 讨论(0)
提交回复
热议问题