2017-01-08 5 views
1

я показываю следующее ProgressBar:Отображение текущего прогресса в 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.

Как это можно достичь?

ответ

0

См Android документации LINK
1) Вы должны определить свой ProgressBar в активность OnCreate (...) ProgressBar прогресс = (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) Однако то, что значение из такой дисплей? Прогресс usely использовали в сочетании с AsyncTask doInBackground(), publishProgress() и onProgressUpdate() ПОСМОТРИТЕ LINK
5), если вы хотите, дисплей на 42% с помощью XML - просто определить тег 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"); 
    } 
} 
+0

Я говорю о фактическом отображении прогресса в тексте. Таким образом, если прогресс достигнет 50%, бар будет заполнен пополам и на нем будет написано 50%. –

+0

Хорошо, вы хотите показать фактическую цифру на ProgressBar? Не проще ли создавать дополнительный TextView и обновлять его со значениями из Progressbar? Я имею в виду 'mTextView.setText (String.ValueOf (progressBar.getProgress()) +" \ 100 ");' –

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 в панель прогресса. Вы можете бросить TextView внутри OnCreate метода и установить вид со значениями фактического прогресса и максимального прогресс:

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

Если вы хотите чего-л больше фантазии вы можете проверить этот пост Show numbers in progress bar.

В целом из этого сообщения они используют подход, который я использую здесь, и они используют библиотеку под названием Number progress bar. Это выглядит довольно хорошо, но я пока не использовал его.

Надеюсь, это поможет.

Смежные вопросы