2010-08-16 9 views
9

Android ProgressDialog ermöglicht es Ihnen, den aktuellen Fortschritt und den Maximalwert als Ganzzahlen festzulegen. Diese Werte werden in dem Dialog wie folgt dargestellt:Fortschrittseinheit in ProgressDialog

3401/10023

wobei die erste Zahl die aktuelle Gang ist, und die zweite Zahl ist der Maximalwert.

Ich möchte auch die Maßeinheit zeigen. Etwas wie folgt aus:

3401/10023 KB

Ist dies möglich mit ProgressDialog? Wenn nicht, was empfehlen Sie, um diese Informationen dem Benutzer zu geben? Ich versuche, ProgressDialog nicht einfach neu zu implementieren, nur um die Einheit zu integrieren.

+0

Warum machen Sie es nicht in Prozentsätzen? Wie 30/100 – fedj

+0

Der Fortschrittsdialog zeigt bereits den Prozentsatz an. Aber in einem Dateidownload-Fortschrittsdialog ist es für den Benutzer angenehmer, den Fortschritt in Bytes anzuzeigen, besonders wenn es sich um eine große Datei handelt. – hpique

+0

Wenn Sie ProgressDialog-Quellen anzeigen, wird der Text von einem Handler verarbeitet, der in der onCreate-Methode erstellt wurde. Siehe meine nächste Antwort – fedj

Antwort

5

von API 11 Starten Sie kann die folgende Funktion aufrufen, um Ihren Zweck zu erreichen.

mProgressDialog.setProgressNumberFormat("%1d/%2d kB") 
5

In der ProgressDialog Quelldatei:

mViewUpdateHandler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       super.handleMessage(msg); 

       /* Update the number and percent */ 
       int progress = mProgress.getProgress(); 
       int max = mProgress.getMax(); 
       double percent = (double) progress/(double) max; 
       mProgressNumber.setText(progress + "/" + max); 
       mProgressPercent.setText(mProgressPercentFormat.format(percent)); 
      } 
     }; 

Sie es neu implementieren müssen, können Sie es nicht vermeiden können

+0

+1 Um mich auf den Quellcode hinzuweisen. – hpique

6

Update: setProgressNumberFormat ist 11. Teil der API seit Ebene

Die HEAD der ProgressDialog Quellcode enthält bereits eine öffentliche Funktion namens setProgressNumberFormat, mit der die Einheit eingestellt werden kann. Leider scheint diese Funktion in der neuesten Android-Version nicht verfügbar zu sein. Ich denke, es wird in einem zukünftigen Update enthalten sein. In der Zwischenzeit ist das Kopieren dieser Implementierung von ProgressDialog die beste Option. Subclassing ProgressDialog ist nutzlos, weil alle Mitglieder sind privat und arbeiten mit view.findViewById(R.id.progress_number), um die TextView direkt ist extrem extrem riskant, da nichts dafür sorgt, dass die ID wird immer das gleiche (oder dass die TextView wird immer existieren).

+0

Ja, aber mindestens 2,3 für das setProgressNumberFormat. Die findViewById wird überhaupt nicht empfohlen, nichts sagt Ihnen, dass eine tatsächliche oder zukünftige Version die gleiche ID hat – fedj

+0

Einverstanden. Ich erwähnte tatsächlich diese Möglichkeiten, um ihre Verwendung zu verhindern, aber ich werde es klarer machen. – hpique

3

Es war für mich nicht klar, dass ich nur einstellen:

mProgressDialog.setMessage("Downloading...(size in kB)"); 

Vielleicht einfachste Weg für jemand anderes ist nicht offensichtlich ...