Android ProgessBar while loading WebView

后端 未结 12 2521
闹比i
闹比i 2020-12-08 01:52

In my application, I have a WebView which loads any URL from the internet. Now, sometimes due to slow networks the page takes a long time to load and the user s

相关标签:
12条回答
  • 2020-12-08 02:33
        WebView webView;
    ProgressDialog progressDialog;
    
    TextView text;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
    
    
        String message = getIntent().getStringExtra("key").toString();
        setTitle(message);
        Bundle isNetworkAvailable = getIntent().getExtras();
    
        String value = "file:///android_asset/n/o/i/no_connection.html";
        if (isNetworkAvailable()) {
            value = isNetworkAvailable.getString("keyHTML");
        }
        webView = (WebView) findViewById(R.id.kamal);
        webView.loadUrl(value);
        init();
    }
    
    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
    
    private void init() {
        webView = (WebView) findViewById(R.id.kamal);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.setBackgroundColor(0);
        webView.getSettings().setJavaScriptEnabled(true);
        progressDialog = new ProgressDialog(WebView_Online.this);
        progressDialog.setMessage("Loading Please wait...");
        progressDialog.setCancelable(false);
        progressDialog.show();
        webView.setWebViewClient(new WebViewClient() {
            public void onPageFinished(WebView view, String url) {
                try {
                    progressDialog.dismiss();
                } catch (Exception e) {
                    e.printStackTrace();
    
                }
            }
    
        });
    }
    
    0 讨论(0)
  • 2020-12-08 02:34

    pass your url in this method

    private void startWebView(String url) {
    
                WebSettings settings = webView.getSettings();
    
                settings.setJavaScriptEnabled(true);
                webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
    
                webView.getSettings().setBuiltInZoomControls(true);
                webView.getSettings().setUseWideViewPort(true);
                webView.getSettings().setLoadWithOverviewMode(true);
    
                progressDialog = new ProgressDialog(ContestActivity.this);
                progressDialog.setMessage("Loading...");
                progressDialog.show();
    
                webView.setWebViewClient(new WebViewClient() {
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        view.loadUrl(url);
                        return true;
                    }
    
                    @Override
                    public void onPageFinished(WebView view, String url) {
                        if (progressDialog.isShowing()) {
                            progressDialog.dismiss();
                        }
                    }
    
                    @Override
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                        Toast.makeText(ContestActivity.this, "Error:" + description, Toast.LENGTH_SHORT).show();
    
                    }
                });
                webView.loadUrl(url);
            }
    
    0 讨论(0)
  • 2020-12-08 02:37

    if you want to show the progressbar every time the user loads page (and not only the first load), then you can use this:

    MainActivity.java

    public class MainActivity extends Activity
    {
        private WebView webView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            webView = (WebView) findViewById(R.id.webView);
    
            final ProgressDialog progressBar = new ProgressDialog(MainActivity.this);
            progressBar.setMessage("Please wait...");
    
            webView.loadUrl("https://example.org/");
            webView.setWebViewClient(new WebViewClient() {
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }
    
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    super.onPageStarted(view, url, favicon);
                    if (!progressBar.isShowing()) {
                        progressBar.show();
                    }
                }
    
                public void onPageFinished(WebView view, String url) {
                    if (progressBar.isShowing()) {
                        progressBar.dismiss();
                    }
                }
    
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    if (progressBar.isShowing()) {
                        progressBar.dismiss();
                    }
                }
            });
    
        }
    }
    

    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"
        android:paddingBottom="0dp"
        android:paddingLeft="0dp"
        android:paddingRight="0dp"
        android:paddingTop="0dp"
        tools:showIn="@layout/activity_main">
    
        <WebView
            android:id="@+id/webView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true" />
    
    </RelativeLayout>
    
    0 讨论(0)
  • 2020-12-08 02:41

    Check the source code. Help you and solve your problem...

    public class AppWebViewClients extends WebViewClient {
         private ProgressBar progressBar;
    
        public AppWebViewClients(ProgressBar progressBar) {
            this.progressBar=progressBar;
            progressBar.setVisibility(View.VISIBLE);
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub
            view.loadUrl(url);
            return true;
        }
    
        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);
            progressBar.setVisibility(View.GONE);
        }
    }
    

    I think it help you.

    Thanks.

    0 讨论(0)
  • 2020-12-08 02:43

    This simple solution worked for me in KOTLIN:

    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"
    }
    
    0 讨论(0)
  • 2020-12-08 02:44
        myThanh.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    
        final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
    
        progressBar = ProgressDialog.show(MainActivity.this,"Đang tải dữ liệu",  "Vui lòng chờ...");
    
        myThanh.setWebViewClient(new WebViewClient() {
    
    
            public void onPageFinished(WebView view, String url) {
                if (progressBar.isShowing()) {
                    progressBar.dismiss();
                }
            }
        });
    
    0 讨论(0)
提交回复
热议问题