【问题标题】:display a progress bar with webview使用 webview 显示进度条
【发布时间】:2013-12-02 11:58:49
【问题描述】:

**我正在开发一个带有webview的android应用程序。当内容加载到webview中时,我需要显示一个进度条。一旦内容加载完成,进度应该被关闭。对于webview部分,我使用下面的代码。我使用 thread.sleep 来 setJavaScriptEnabled(true),因为我首先 setJavaScriptEnabled(false) 和 15 秒后 setJavaScriptEnabled(true)。我应该怎么做

public class Activity1 extends Activity {

private WebView webView;

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

    setContentView(R.layout.activity_activity1);
    Toast.makeText(getApplicationContext(), "welcome", Toast.LENGTH_LONG).show();
    String url = "http://student.iaun.ac.ir";
    webView = (WebView) findViewById(R.id.webview);

    webView.setWebViewClient(new myWebViewClient());
    webView.getSettings().setJavaScriptEnabled(false);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.loadUrl(url);
    webView.getSettings().setSavePassword(false);

    new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                startDelay();
                webView.getSettings().setJavaScriptEnabled(true);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();

}

void startDelay() throws InterruptedException {
    Thread.sleep(15000);
}

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

}

public boolean onKeyDown(int keyCode, KeyEvent event) {
    // Check if the key event was the Back button and if there's history
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
        webView.goBack();
        return true;
    }
    // If it wasn't the Back key or there's no web page history, bubble up to the default
    // system behavior (probably exit the activity)
    return super.onKeyDown(keyCode, event);
}
}

【问题讨论】:

    标签: java android import webview


    【解决方案1】:

    你可以用更简单的方式实现进度条

    protected static ProgressBar progressBar;
    
    //Some Codes
    WebView loginwebview = (WebView) activity.findViewById(R.id.login_webview);
    loginwebview.setWebChromeClient
        (
           new WebChromeClient()
           {
             @Override
              public void onProgressChanged(WebView view, int newProgress) 
               {
                 activity.setTitle("Loading...Please wait");
                 startSpinner();
                 activity.setProgress(newProgress * 100);
                 if(newProgress == 100)
                   {
                        activity.setTitle(R.string.app_name);
                        stopSpinner();
                   }
             }
          });
    
    loginwebview.setWebViewClient(new WebViewClient() 
        {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) 
            {
               view.loadUrl(url);
               return true;
    
        }
    

    还有 startSpinner() 和 stopSpinner() 方法

     protected static void startSpinner(){progressBar.setVisibility(WebView.VISIBLE);}
     protected static void stopSpinner(){progressBar.setVisibility(WebView.GONE);}
    

    【讨论】:

      【解决方案2】:

      使用 Bellow 类希望它会起作用

      public class myWebViewClient extends WebViewClient {
      private ProgressDialog dialog;
      private String redirect_str = "Processing...\nPlease wait...";
      Context context;
      public MyWebViewClient(Context context) {
          this.context = context;
      }
      
      @Override
      public void onPageStarted(WebView paramWebView, String paramString, Bitmap paramBitmap) {
          super.onPageStarted(paramWebView, paramString, paramBitmap);
          if(this.dialog == null) {
              this.dialog = ProgressDialog.show(this.context, "", this.redirect_str, true);
          }
      }
      
      
      @Override
      public void onPageFinished(WebView paramWebView, String paramString) {
          super.onPageFinished(paramWebView, paramString);
          if (this.dialog != null) {
              this.dialog.dismiss();
              this.dialog = null;
          }
      }
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String paramString) {
          view.loadUrl(paramString);
          return true;
      }
      }
      

      【讨论】:

      • 我只想显示进度条 20 秒我应该怎么做
      • @user3033953 检查我的代码。你可以设置你需要多长时间进度条的计时器
      【解决方案3】:

      试试这个..

      全球

      ProgressDialog pDialog;
      

      java

      里面
      pDialog = ProgressDialog.show(Activity1.this, "Loading", "Please wait...", true);
      webView.getSettings().setJavaScriptEnabled(false);
      webView.getSettings().setLoadWithOverviewMode(true);
      webView.getSettings().setUseWideViewPort(true);
      webView.getSettings().setBuiltInZoomControls(true);
      
      webview.setWebViewClient(new WebViewController());
      

      WebViewController

      public class WebViewController extends WebViewClient {
      
              @Override
                 public boolean shouldOverrideUrlLoading(WebView view, String url) {
                     view.loadUrl(url);
                     view.getSettings().setSavePassword(false);
                     return true;
                 }
      
             public void onPageFinished(WebView view, String url) {
      
                 if(pDialog != null)
                 {
                     if(pDialog.isShowing())
                         pDialog.dismiss();
                     }
                 }
         }
      

      更多想法参考此link1,link2

      【讨论】:

        【解决方案4】:

        //我使用了这个类,我的代码在我身边工作,请试试这个可能对你有帮助

        public class WebViewActivity extends Activity {
            private WebView webview;
            private static final String TAG = "Main";
            private ProgressDialog progressBar;
            private TextView header_maintext;
            private TextView headeroptiontext;
            private RelativeLayout back;
            private String url_string="http://www.google.com";
            private String header_maintext_string="Your text";  
        
            /** Called when the activity is first created. */
            @SuppressLint("SetJavaScriptEnabled") @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                 requestWindowFeature(Window.FEATURE_NO_TITLE);
                 setContentView(R.layout.webview_layout);
        
        
                webview = (WebView)findViewById(R.id.webview01);
                header_maintext= (TextView)findViewById(R.id.header_maintext);
                header_maintext.setText(header_maintext_string);
        
                headeroptiontext = (TextView)findViewById(R.id.headeroptiontext);
                headeroptiontext.setVisibility(View.GONE);
        
                WebSettings settings = webview.getSettings();
                settings.setJavaScriptEnabled(true);
                webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
                webview.getSettings().setLoadWithOverviewMode(true);
                webview.getSettings().setUseWideViewPort(true);
        
                  back = (RelativeLayout) findViewById(R.id.back_layout);
                  back.setOnClickListener(new OnClickListener() {
        
                    @Override
                    public void onClick(View arg0) 
                    {
                        // TODO Auto-generated method stub
                        if(webview.canGoBack() == true)
                            {
                                webview.goBack();
                            }
                        else
                            {
                                finish();
                            }
                     }
                });
        
                final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        
                progressBar = ProgressDialog.show(WebViewActivity.this, "My application", "Loading...");
        
                webview.setWebViewClient(new WebViewClient() {
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        
                        view.loadUrl(url);
                        return true;
                    }
        
                    public void onPageFinished(WebView view, String url) {
                        Log.i(TAG, "Finished loading URL: " +url);
                        if (progressBar.isShowing()) {
                            progressBar.dismiss();
                        }
                    }
        
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        
                        Toast.makeText(WebViewActivity.this, "Oh no! " + description, Toast.LENGTH_SHORT).show();
                        alertDialog.setTitle("Error");
                        alertDialog.setMessage(description);
                        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                return;
                            }
                        });
                        alertDialog.show();
                    }
                });
                webview.loadUrl(url_string);
        
        
            }
            @Override
        
            public boolean onKeyDown(int keyCode, KeyEvent event) {
                if(event.getAction() == KeyEvent.ACTION_DOWN){
                    switch(keyCode)
                    {
                    case KeyEvent.KEYCODE_BACK:
                        if(webview.canGoBack() == true){
                            webview.goBack();
                        }else{
                            finish();
                        }
                        return true;
                    }
        
                }
                return super.onKeyDown(keyCode, event);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多