在Webview中添加进度对话框

12

我一直在尝试将进度对话框添加到我的应用程序中,在Webview加载页面时,以便不会出现空白的白屏。我知道这个问题已经到处发布了,但我似乎找不到适合我的解决方案。我是编程新手,并且正在使用Android,所以任何信息都会很有帮助。下面是我目前拥有的代码。在onPageStarted中,我遇到了一个位图编译错误,我不确定问题出在哪里。谢谢。

public class Grades extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);  


    //requesting system settings

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().requestFeature( Window.FEATURE_PROGRESS);
     WebView webview = new WebView(this);

     //web settings

    WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true); 
        webSettings.setDisplayZoomControls(true);
        webSettings.setBuiltInZoomControls(true);


     setContentView(webview);

    //loads webpages in webview instead of launching browser

     webview.setWebViewClient(new WebViewClient() {
            ProgressDialog prDialog;
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                prDialog = ProgressDialog.show(Grades.this, null, "loading, please wait...");
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                prDialog.dismiss();
                super.onPageFinished(view, url);
            }
        });

   //loading webpage
     webview.loadUrl("page__link");
}

我现在遇到的错误是,对话框一旦出现,页面加载后它就不会消失。 - bigC5012
1
使用内置的方法,参见https://dev59.com/O0_Sa4cB1Zd3GeqP9y3z#31826829 - Zar E Ahmer
4个回答

34

请检查这段代码,

    final ProgressDialog pd = ProgressDialog.show(OnlinePaymentActivity.this, "", "Please wait, your transaction is being processed...", true);
            
    WebView mWebview  = (WebView)findViewById(R.id.webView1);
    mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript
    mWebview.getSettings().setLoadWithOverviewMode(true);
    mWebview.getSettings().setUseWideViewPort(true);
    mWebview.getSettings().setBuiltInZoomControls(true);

    mWebview.setWebViewClient(new WebViewClient() {

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            pd.show();
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            pd.dismiss();
            String webUrl = mWebview.getUrl();
        }

    });

    mWebview .loadUrl("www.google.com");

7

Webview带有进度对话框适用于我。完整的工作代码

import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.yubrajpoudel.R;

/**
 * Created by yubraj on 12/25/15.
 */
public class NewsActivity extends AppCompatActivity {
    private WebView webView;
    ProgressDialog prDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.page_news);
        setSupportActionBar((Toolbar) findViewById(R.id.toolbar));

        webView = (WebView) findViewById(R.id.wv_news);
        webView.setWebViewClient(new MyWebViewClient());

        String url = "http://google.com/";
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        webView.loadUrl(url);


    }

    private class MyWebViewClient extends WebViewClient {

        @Override
        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);
            prDialog = new ProgressDialog(NewsActivity.this);
            prDialog.setMessage("Please wait ...");
            prDialog.show();
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            if(prDialog!=null){
                prDialog.dismiss();
            }
        }
    }
}

0

试试这个,希望这就是你想要的。

webview.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
            //Also you can show the progress percentage using integer value 'progress'
            if(!prDialog.isShowing()){
            prDialog = ProgressDialog.show(Grades.this, null, "loading, please wait...");
            }


            if (progress == 100&&prDialog.isShowing()) {
                prDialog.dismiss();
            }
        }
    });

我们使用 WebView 在我们自己的应用程序中加载网页,而不是导航到 Chrome 浏览器。这是一种错误的方法。 - Rushi Ayyappa

0

Kotlin 网页视图与进度对话框对我有效。完整的工作代码

    var webView = web_view_privacy_policy
    webView?.settings?.javaScriptEnabled = true
    webView?.settings?.loadWithOverviewMode = true
    webView?.settings?.useWideViewPort= true

    webView.webViewClient = object : WebViewClient(){
        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
            showProgress(getString(R.string.please_wait))
        }

        override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
            return true
        }

        override fun onPageFinished(view: WebView?, url: String?) {
            hideProgress()
        }
    }

    webView.loadUrl(ApiEndPoint.ENDPOINT_PRIVACY_POLICY)

web_view_privacy_policy是.xml文件中WebView的id。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接