【问题标题】:Adding a Progress Dialog in a webview在 web 视图中添加进度对话框
【发布时间】:2013-05-26 19:21:18
【问题描述】:

当页面加载到 web 视图中时,我一直在尝试将进度对话框合并到我的应用程序中,因此不只是一个空白的白色屏幕。我知道这个问题随处可见,但我似乎无法找出任何对我有用的东西。我是编程和使用 android 的新手,所以任何信息都会有所帮助。下面是我现在拥有的代码。使用 onPageStarted 我收到 Bitmap 的编译错误,我不确定问题是什么。谢谢。

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");
}

【问题讨论】:

标签: android webview dialog webpage progress


【解决方案1】:

检查此代码,

    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");

【讨论】:

    【解决方案2】:

    带有进度对话框的 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();
                }
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      试试这个,我希望这就是你所追求的

      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 浏览器。这是一种错误的方法。
      【解决方案4】:

      带有进度对话框的 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-07
        • 2017-08-12
        • 1970-01-01
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多