【问题标题】:Android progress bar not working when using with splash screen and webview与启动屏幕和 webview 一起使用时,Android 进度条不起作用
【发布时间】:2014-01-10 20:57:32
【问题描述】:

您好,我正在使用 android 。我创建了一个带有进度条的初始屏幕的 web 视图。我的应用程序最初加载启动画面并将 url 加载为背景。当 url 完全加载时,启动画面将消失并显示页面。这部分工作正常。但是当我使用进度条和启动画面时,进度栏不工作..如何实现带有启动画面的进度条...请帮助我,我是 android 开发的新手,谢谢:)

这是我的代码

    public class WebViewExample extends Activity {
   private WebView mWebView;
   ProgressBar progressBar;
   Context context;
    /** Called when the activity is first created. */


   @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE); // remove titlebar
    setContentView(R.layout.main);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    if(isNetworkStatusAvialable (getApplicationContext())) {
        mWebView = (WebView) findViewById(R.id.webview);
         progressBar = (ProgressBar) findViewById(R.id.progressBar1);

            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.setWebViewClient(new wapWebViewClient());
            mWebView.loadUrl("http://facebook.com");
    } else {
          Toast.makeText(getApplicationContext(), "internet is not avialable ", Toast.LENGTH_LONG).show();

    }


  }
    public static boolean isNetworkStatusAvialable (Context context) {
                    ConnectivityManager connectivityManager = (ConnectivityManager)   context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager != null) 
    {
        NetworkInfo netInfos = connectivityManager.getActiveNetworkInfo();
        if(netInfos != null)
        if(netInfos.isConnected()) 
            return true;
    }
    return false;
}

     private class wapWebViewClient extends WebViewClient {

  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
      view.loadUrl(url);
      return true;
  }

  @Override
  public void onPageFinished(WebView view, String url) {
      // when the page loaded splash screen has been invisible
      mWebView.setVisibility(View.VISIBLE); 
      progressBar.setVisibility(View.GONE);

  }

    @Override
    public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {
        // if any error occured this message will be showed
                     Toast.makeText(WebViewExample.this, "Error is occured, please try again..." + description, Toast.LENGTH_LONG).show();
    }
  }

   @Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
  if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
      // setting of back button
      mWebView.goBack();
      return true;
    }
    return super.onKeyDown(keyCode, event);
   }
  }

【问题讨论】:

  • 那么你希望你的进度条做什么?它只是一个小部件。您定义了它,但没有更新。您只是将其设置为可见。
  • 我想和url一起加载
  • 缺少对 progressBar.setProgress(...) 的调用。
  • 你好@Ptm:你想在你的webview加载时显示进度条我是对的吗?如果是,请告诉我,然后我会给你答案
  • @V.P 是的,你说过..

标签: android web splash-screen


【解决方案1】:

首先,您需要为ProgressBar设置最大值。

提示:计算您需要加载的所有资源并将最大值设置为此数量。

progressBar.setMax(100); //100 for example.

除了您的代码正在运行并且您的资源正在加载,您还需要不断增加progressBar 进度,使用Integer 来完成它,创建一个函数来为您完成它:

private void incrementPercentage(){
  mProgressStatus++;//i declared it as a private Integer on the activity class.
  progressBar.setProgress(mProgressStatus);
}

要增加进度,只需在加载的每个资源上调用 incrementPercentage()

在加载最后一个资源时,状态将等于您设置的最大值,完成后,您拥有 100%。

在您的情况下,我看到您使用了WebView,因此获得进展的更好解决方案在这里:

嗯,你也想要一个百分比在你的进度中,所以你需要创建一个TextView 并对齐它,使它出现在你的progressBar 的前面中心,所以使用像这样的RelativeLayout

<RelativeLayout
        android:id="@+id/LayoutProgressBar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:gravity="top"
        android:padding="3dp"
        android:weightSum="10" >

        <ProgressBar
            android:id="@+id/progressBar1"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true" />

        <TextView
            android:id="@+id/lblPercentage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="-2dp"
            android:text="0%"
            android:textAppearance="?android:attr/textAppearanceMedium" />

    </RelativeLayout>

然后,在你的代码中声明它:

txtPercentage = (TextView) findViewById(R.id.lblPercentage);

并且也增加它:

mWebView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) 
               {
               if(progress < 100 && progressBar.getVisibility() == ProgressBar.GONE){
                   progressBar.setVisibility(ProgressBar.VISIBLE);
                   txtPercentage.setVisibility(ProgressBar.VISIBLE);
               }
               progressBar.setProgress(progress);
               txtPercentage.setText(String.valueOf(progress)+'%'); //here is the %
               if(progress == 100) {
                   progressBar.setVisibility(ProgressBar.GONE);
                   txtPercentage.setVisibility(ProgressBar.GONE);
               }
            }
        });

【讨论】:

  • 您只需要创建一个TextView 并执行几乎相同的操作,看看我的编辑
  • 哦,那很好。我还需要在 webview 的顶部和底部添加菜单栏.. 我该如何实现这个..??
  • 您的问题是关于ProgressBar。您应该问另一个问题以了解如何执行此操作。 :p
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2018-09-12
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多