2010-08-16 16 views
9

ProgressDialog de Android le permite establecer el progreso actual y el valor máximo como enteros. Estos valores se muestran en el cuadro de diálogo como este:Unidad de progreso en ProgressDialog

3401/10023

donde el primer número es el progreso actual, y el segundo número es el valor máximo.

También me gustaría mostrar la unidad de medida. Algo como esto:

3401/10023 KB

Es esto posible utilizando ProgressDialog? Si no, ¿qué recomienda hacer para darle esta información al usuario? Intento evitar volver a implementar ProgressDialog solo para incluir la unidad.

+0

¿Por qué no lo haces en términos de porcentajes? Como 30/100 – fedj

+0

El diálogo de progreso ya muestra el porcentaje. Pero en un diálogo de progreso de descarga de archivos, creo que es más amigable para el usuario mostrar el progreso en bytes, especialmente si se trata de un archivo grande. – hpique

+0

Si echa un vistazo a las fuentes de ProgressDialog, el texto lo maneja un controlador creado en el método onCreate. Ver mi siguiente respuesta – fedj

Respuesta

5

A partir de API 11, se puede llamar a la siguiente función para lograr su propósito.

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

En el archivo de origen ProgressDialog:

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

Debe reimplementar ella, no se puede evitar que

+0

+1 Por señalarme hacia el código fuente. – hpique

6

Actualización: setProgressNumberFormat es parte de la API desde el nivel 11.

El HEAD de la ProgressDialog el código fuente ya incluye una función pública llamada setProgressNumberFormat que se puede usar para configurar la unidad. Lamentablemente, esta función no parece estar disponible en la última versión de Android. Supongo que se incluirá en una actualización futura.

Mientras tanto, copiar esta implementación de ProgressDialog es la mejor opción. La subclasificación ProgressDialog no sirve porque todos sus miembros son privados y trabajan con view.findViewById(R.id.progress_number) para obtener directamente TextView es extremadamente arriesgado, ya que nada garantiza que la identificación será siempre la misma (o que TextView siempre existirá).

+0

Sí, pero al menos 2.3 para setProgressNumberFormat. findViewById no se recomienda en absoluto, nada le dice que ninguna versión actual o futura tenga la misma identificación – fedj

+0

de acuerdo. De hecho, mencioné esas posibilidades para desalentar su uso, pero lo aclararé. – hpique

3

no era obvio para mí que acabo puede establecer:

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

Tal vez esto más simple manera no es obvio para alguien más ...