显示ProgressBar上的当前进度

时间:2017-01-08 16:51:07

标签: java android progress-bar

我显示以下ProgressBar

<ProgressBar
    android:id="@+id/progress_bar"
    android:layout_width="fill_parent"
    android:layout_height="30dp"
    android:padding="3dp"
    android:max="100"
    android:progressDrawable="@drawable/progress_bar_states"
    android:layout_marginTop="10dp"
    style="?android:attr/progressBarStyleHorizontal"
    android:indeterminateOnly="false"
    android:layout_below="@id/action" />

看起来像this

enter image description here 但我希望在条形图上显示当前的进度:42/100

如何实现?

2 个答案:

答案 0 :(得分:0)

请参阅Android文档LINK
1)您需要在Activity onCreate(...)中定义您的进度条         ProgressBar progress =(ProgressBar)findViewBtId(R.id.progress_bar);
2)更新进度使用setProgress(int)方法(示例)

for (int i=0; i<100; i++)
{        
   progress.setProgress(i);
   Thread.sleep(1000);
}

3)如果你想要显示只有42%使用它:

progress.setProgress(42);

4)然而,这种展示的价值是什么?使用的进度与AsyncTask doInBackground(),publishProgress()和onProgressUpdate()LOOK LINK结合使用
5)如果你想使用xml显示42% - 只需定义标签android:progress="42"

已更新 - 为了同时显示动画和数字的进展,我已经通过下一个代码实现了:

 protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        progressBar = (ProgressBar) findViewById(R.id.progressBar1);
        text = (TextView) findViewById(R.id.textView1);

        MyTask task = (MyTask) new MyTask().execute();
    }
private class MyTask extends AsyncTask <Void, Integer, Void>
{

    @Override
    protected void onPreExecute()
    {
        progressBar.setVisibility(View.VISIBLE);
    }

    @Override
    protected Void doInBackground(Void... params)
    {
        for (int i=0; i<100; i++)
        {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            publishProgress(i);
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values)
    {
        progressBar.setProgress(values[0]);
        text.setText(progressBar.getProgress() + "/100");
    }
}

答案 1 :(得分:0)

这是我的方法。在XML文件中,您有进度条。在目标进度条下添加TextView。

 <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="290dp"
        android:layout_height= "26dp"
        android:id="@+id/pbarProgreso"
        android:layout_marginTop="15dp"
        android:layout_marginStart="10dp"
        **android:max="100"**/>

您可以在xml文件中或在侦听器声明中设置条形码的最大值...是您的选择。在进度条下添加TextView非常容易。您可以在onCreate方法中强制转换textView,并使用实际进度和最大进度的值设置视图:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView progressText = ((TextView) findViewById(R.id.textView));
    pbarProgreso = (ProgressBar) findViewById(R.id.pbarProgreso);
   //Setting up initial View
    pbarProgreso.setProgress(0);
    progressText.setText(pbarProgreso.getProgress() + "/"
                                 + pbarProgreso.getMax());
}

然后,您将有一个监听器来处理任何可以增加进度的事件。让我们假设一个按钮

 increaseProgress_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            pbarProgreso.incrementProgressBy(10);
            progressText.setText(pbarProgreso.getProgress()+ "/"
                         + pbarProgreso.getMax()) ;
        }
    }) ;

如果您希望smth更加流行,可以查看此帖子Show numbers in progress bar

在该帖子的摘要中,他们使用我在这里使用的方法,他们使用名为Number progress bar的库。它看起来很不错但到目前为止我还没用过它。

我希望这会有所帮助。